Я изучаю Spring Boot и у меня есть вопрос с одним примером в справочной документации. В следующем разделе документации упоминается
6. Использование аннотации @SpringBootApplication
Одну аннотацию @SpringBootApplication можно использовать для включения этих трех функций, а именно:
@ EnableAutoConfiguration: включить механизм автоконфигурации Spring Boot
@ ComponentScan: включить сканирование @Component для пакета, в котором находится приложение (см. Рекомендации)
@ Конфигурация: позволяет зарегистрировать дополнительные компоненты в контексте или импортировать дополнительные классы конфигурации
и следующий пример к заменяет эту единственную аннотацию на любую из функций, которые она включает , меня немного смущает. Пример
package com.example.myapplication;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ MyConfig.class, MyAnotherConfig.class })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Объяснение для примера
В этом примере Application аналогично любому другому приложению Spring Boot, за исключением того, что @ классы с аннотациями компонентов и @ ConfigurationProperties аннотированные классы не обнаруживаются автоматически , а определяемые пользователем bean-компоненты импортируются явно (см. @Import).
Единственное существенное отличие, которое я вижу в примере кода Выше указано, что у него нет аннотации @ComponentScan
. Я также прочитал в разделе комментариев SO ответ (Стефан Николл, 5 мая, 17 в 11:07), что аннотация @Component официально не рекомендуется для автоматического определения @ConfigurationProperties. Поэтому я предполагаю, что классы среды Spring с @ConfigurationProperties не аннотируются @ Component.
Также я проверил источник аннотации @SpringBootApplication
и не смог определить ничего, что должно включить автоматическое c обнаружение @ConfigurationProperties
аннотированные классы.
Справочный документ 2.8.3. В разделе «Включение аннотированных типов @ ConfigurationProperties » показан следующий способ сканирования и автоопределения @ ConfigurationProperties
@SpringBootApplication
@ConfigurationPropertiesScan({ "com.example.app", "org.acme.another" })
public class MyApplication {
}
Со всеми этими подробностями я хотел бы понять,
Почему это явно упоминается для этого примера, что @ аннотированные классами ConfigurationProperties классы не обнаруживаются автоматически ? и Как аннотированные классы @ConfigurationProperties автоматически обнаруживаются при использовании @SpringBootApplication.
Дополнительное примечание: я обнаружил небольшую разницу между предыдущей версией документации и текущей один. В следующей ссылке отсутствует текущая ссылка
Имейте в виду, что аннотация @EnableConfigurationProperties также автоматически применяется к вашему проекту, так что любой существующий компонент, аннотированный @ConfigurationProperties, настраивается из Environment