Поиск…


Вступление

В этом разделе я расскажу о сканировании весеннего пакета загрузки.

Вы можете найти основную информацию в документах весенней загрузки в следующей ссылке ( используя-boot-structuring-your-code ), но я постараюсь предоставить более подробную информацию.

Весенняя загрузка и весна в целом обеспечивают функцию автоматического сканирования пакетов для определенных аннотаций для создания beans и configuration .

параметры

аннотирование подробности
@SpringBootApplication Основная аннотация. используется один раз в приложении, содержит основной метод и действует как основной пакет для сканирования пакетов
@SpringBootConfiguration Указывает, что класс предоставляет приложение Spring Boot. Должен быть объявлен только один раз в приложении, обычно автоматически, устанавливая @SpringBootApplication
@EnableAutoConfiguration Включить автоматическую настройку контекста Spring Spring. Должен быть объявлен только один раз в приложении, обычно автоматически, устанавливая @SpringBootApplication
@ComponentScan Используется для запуска автоматического сканирования пакетов на определенном пакете и его дочерних элементах или для установки пользовательского сканирования пакетов
@Configuration Используется для объявления одного или нескольких методов @Bean . Можно выбрать автоматическое сканирование пакетов, чтобы объявить один или несколько методов @Bean вместо традиционной конфигурации xml
@Bean Указывает, что метод создает компонент, который должен управляться контейнером Spring. Обычно аннотированные методы @Bean будут помещаться в аннотированные классы @Configuration которые будут отобраны при сканировании пакетов для создания компонентов, основанных на конфигурации Java.
@Составная часть Объявляя класс как @Component он становится кандидатом на автоматическое обнаружение при использовании аннотационной конфигурации и сканирования классов. Обычно класс, аннотированный с помощью @Component , станет bean в приложении
@Repository Первоначально он был определен Domain-Driven Design (Evans, 2003) как «механизм инкапсуляции хранилища. Обычно он используется для указания Repository для spring data
@Обслуживание Очень похоже на @Component . первоначально разработанный Domain-Driven Design (Evans, 2003) как «операция, предлагаемая как интерфейс, который стоит отдельно в модели без инкапсулированного состояния».
@Controller Указывает, что аннотированный класс является «контроллером» (например, веб-контроллером).
@RestController Удобная аннотация, которая сама аннотируется с помощью @Controller и @ResponseBody . Будет автоматически выбран по умолчанию, поскольку он содержит аннотацию @Controller по умолчанию.

@SpringBootApplication

Самый простой способ структурирования вашего кода с использованием весенней загрузки для хорошего автоматического сканирования пакетов - @SpringBootApplication аннотация @SpringBootApplication . Эта аннотация предоставляет в себе 3 другие аннотации, которые помогают с автоматическим сканированием: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan (больше информации об каждой аннотации в разделе « Parameters »).

@SpringBootApplication обычно размещается в основном пакете, а все остальные компоненты будут размещены в пакетах в этом файле:

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

Если не указано иное, пружинная загрузка @Configuration обнаруживает @Configuration , @Component , @Repository , @Service , @Controller , @RestController аннотации автоматически под сканированными пакетами ( @Configuration и @RestController выбираются, потому что они аннотируются @Component и @Controller соответственно ).

Пример базового кода:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}

Установка пакетов / классов в явном виде

Начиная с версии 1.3 вы также можете сказать весеннюю загрузку для сканирования определенных пакетов, установив scanBasePackages или scanBasePackageClasses в @SpringBootApplication вместо указания @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - установите com.example.myproject в качестве базового пакета для сканирования.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - типа безопасная альтернатива scanBasePackages устанавливает пакет CustomerController.java , com.example.myproject.web , так как базовый пакет для сканирования.

Исключение автоматической настройки

Еще одна важная особенность - возможность исключения определенных классов автоматической конфигурации с использованием exclude или excludeName ( excludeName существует с версии 1.3 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - исключает DemoConfiguration из автоматического сканирования пакетов.
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - будет делать то же самое с использованием полностью классифицированного имени класса.

@ComponentScan

Вы можете использовать @ComponentScan для настройки более сложного сканирования пакетов. Также есть @ComponentScans которые выступают в качестве аннотации к контейнеру, которая объединяет несколько аннотаций @ComponentScan .

Примеры базового кода

@ComponentScan
public class DemoAutoConfiguration {
}

@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}

@ComponentScan без конфигурации действует как @SpringBootApplication и сканирует все пакеты под классом, аннотированные этой аннотацией.

В этом примере я @ComponentScan некоторые полезные атрибуты @ComponentScan :

  1. basePackages - может использоваться для указания определенных пакетов для сканирования.
  2. useDefaultFilters - установив этот атрибут в false (по умолчанию true), вы можете убедиться, что весна не сканирует @Component , @Repository , @Service или @Controller автоматически.
  3. includeFilters - может использоваться для включения конкретных весенних аннотаций / шаблонов регулярных выражений для включения в сканирование пакетов.
  4. excludeFilters - может использоваться, чтобы исключить определенные шаблоны весенних аннотаций / регулярных выражений для включения в сканирование пакетов.

Есть гораздо больше атрибутов, но они наиболее часто используются для настройки сканирования пакетов.

Создание собственной автоконфигурации

Весенняя загрузка основана на множестве готовых исходных проектов автоматической конфигурации. Вы уже должны быть знакомы с стартовыми проектами весенних ботинок.

Вы можете легко создать свой собственный проект стартера, выполнив следующие простые шаги:

  1. Создайте несколько классов @Configuration для определения @Configuration по умолчанию. Вы должны максимально использовать внешние свойства, чтобы разрешить настройку и пытаться использовать вспомогательные аннотации @AutoConfigureBefore , @AutoConfigureAfter как @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean и т. Д. Более подробную информацию о каждой аннотации можно найти в официальной документации. Аннотации условий
  2. Поместите файл / файлы автоматической конфигурации, который объединяет все классы @Configuration .
  3. Создайте файл с именем spring.factories и поместите его в src/main/resources/META-INF .
  4. В spring.factories установите свойство org.springframework.boot.autoconfigure.EnableAutoConfiguration с разделителями, разделенными запятыми, вашими классами @Configuration :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

Используя этот метод, вы можете создать свои собственные классы автоматической настройки, которые будут выбраны весной-загрузкой. Spring-boot автоматически сканирует все зависимости maven / gradle для файла spring.factories , если он находит его, он добавляет все классы @Configuration указанные в нем, в процесс автоматической настройки.

Удостоверьтесь, что ваш проект стартовой auto-configuration не содержит spring boot maven plugin потому что он упакует проект как исполняемый JAR и не будет загружаться по пути класса, как предполагалось. Весенняя загрузка не сможет найти ваши spring.factories и не загрузит вашу конфигурацию



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow