@SpringBootApplication@Configuration@Configuration загружает методы Spring1. @Configuration настраивает Spring и запускает контейнер Spring2. @Configuration запускает контейнер + @Bean регистрирует bean-компонент3. @Configuration запускает контейнер + @Component регистрирует bean-компонент4. Два метода регистрации класса AppContext с помощью AnnotationConfigApplicationContext5. Настройте веб-приложение (AnnotationConfigApplicationContext настраивается в файле web.xml)Объединение нескольких классов конфигурацииВведите XML-файл конфигурации spring в @configuration.Введите другие конфигурации аннотаций в @configuration@configuration вложенность (вложенная конфигурация должна быть статическим классом)@EnableAutoConfigurationAutoConfigurationImportSelector
@SpringBootApplication
При разработке с использованием среды Springboot мы обычно добавляем к основной функции@SpringBootApplication
Аннотации, позволяющие приложению автоматически настраивать сканирование компонентов.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
Аннотация эквивалентна использованию свойства по умолчанию.@Configuration
,@EnableAutoConfiguration
а также@ComponentScan
,
Проверьте это здесь@SpringBootApplication
Аннотированный исходный код.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
}
Почему@SpringBootApplication注解
не содержит@Configuration
, на самом деле в@SpringBootConfiguration
в :
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
@SpringBootConfiguration
унаследовано от@Configuration
, функции этих двух также одинаковы, помечая текущий класс как класс конфигурации, и изменят один или несколько объявленных в текущем классе с помощью@Bean
Экземпляр метода, отмеченный аннотацией, включается в контейнер Spring, а имя экземпляра является именем метода.
Далее мы представим три аннотации, упомянутые выше.
@Configuration
Начиная с Spring 3.0,@Configuration
Используется для определения классов конфигурации, которые могут заменить файлы конфигурации xml.Аннотированный класс содержит один или несколько@Bean
аннотированные методы, которые будутAnnotationConfigApplicationContext
илиAnnotationConfigWebApplicationContext
Классы сканируются и используются для создания определений bean-компонентов и инициализации контейнера Spring.
Уведомление:@Configuration
Аннотированные классы конфигурации имеют следующие требования:
- не может быть конечным типом;
- не может быть анонимным классом;
- Вложенная конфигурация должна быть статическим классом.
@Configuration загружает методы Spring
1. @Configuration настраивает Spring и запускает контейнер Spring
@Configuration
Маркировка на классе эквивалентна использовать класс как в файле конфигурации XML, который используется для настройки контейнера пружины (контекст приложения).
@Configuration
public class TestConfiguration {
public TestConfiguration(){
System.out.println("TestConfiguration容器启动初始化。。。");
}
}
Эквивалентно
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd" default-lazy-init="false">
<bean id="testConfiguration" class="com.example.configuration.TestConfiguration"></bean>
</beans>
Основной метод проверки:
public class TestMain {
public static void main(String[] args) {
// @Configuration注解的spring容器加载方式,用AnnotationConfigApplicationContext替换ClassPathXmlApplicationContext
// ApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfiguration.class);
//通过加载 spring-context.xml文件,此时将TestConfiguration上的注解取消
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
}
}
Есть две реализации вышеуказанного метода, которые можно протестировать отдельно, и получить следующие результаты:
21:18:29.599 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testConfiguration'
TestConfiguration容器启动初始化。。。
2. @Configuration запускает контейнер + @Bean регистрирует bean-компонент
@Bean
Аннотированный к методу (метод, возвращающий экземпляр), он эквивалентен XML-файлу конфигурации Spring: регистрация объекта bean-компонента.
класс бобов:
public class TestBean {
private String username;
private String url;
private String password;
public void sayHello(){
System.out.println("TestBean sayHello...");
}
public String toString(){
return "username:"+this.username+",url:"+this.url+",password:"+this.password;
}
public void start(){
System.out.println("TestBean 初始化。。。");
}
public void cleanUp(){
System.out.println("TestBean 销毁。。。");
}
}
Класс конфигурации:
@Configuration
public class TestConfiguration2 {
public TestConfiguration2(){
System.out.println("TestConfiguration容器启动初始化。。。");
}
@Bean
@Scope("prototype")
public TestBean testBean(){
return new TestBean();
}
}
Класс тестирования основного метода:
public class TestMain2 {
public static void main(String[] args) {
// @Configuration注解的spring容器加载方式,用AnnotationConfigApplicationContext替换ClassPathXmlApplicationContext
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfiguration2.class);
//获取 Bean
TestBean testBean = (TestBean) applicationContext.getBean("testBean");
testBean.sayHello();
System.out.println(testBean.hashCode());
//再次获取 bean,如果testBean方法上没加@Scope(“prototype”),则@Bean注解默认作用域为单例singleton作用域,所以返回的都是同一个对象
TestBean testBean1 = (TestBean) applicationContext.getBean("testBean");
System.out.println(testBean1.hashCode());
}
}
Когда класс Bean не добавляет@Scope("prototype")
Вывод при аннотировании:
09:12:58.279 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testConfiguration2'
TestConfiguration容器启动初始化。。。
09:12:58.282 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testBean'
TestBean sayHello...
2143437117
2143437117
плюс@Scope("prototype")
Вывод при аннотировании:
09:13:42.796 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testConfiguration2'
TestConfiguration容器启动初始化。。。
TestBean sayHello...
1989335500
1978869058
В заключение:
-
@Bean
Аннотируется к методу, возвращающему экземпляр, если он не передан@Bean
Укажите имя компонента, значение по умолчанию совпадает с отмеченным именем метода; -
@Bean
Областью действия аннотации по умолчанию является одноэлементная одноэлементная область, доступ к которой можно получить через@Scope("prototype")
установить область прототипа; - теперь, когда
@Bean
Роль заключается в регистрации объекта bean-компонента, после чего его можно использовать полностью@Component
,@Controller
,@Service
,@Ripository
Подождите, пока аннотация зарегистрирует бин, конечно, вам нужно настроить@ComponentScan
Аннотации сканируются автоматически.
3. @Configuration запускает контейнер + @Component регистрирует bean-компонент
класс бобов:
package com.example.domain;
import org.springframework.stereotype.Component;
@Component
public class BeanWithComponent {
public void sayHello(){
System.out.println("BeanWithComponent sayHello...");
}
public void start(){
System.out.println("BeanWithComponent 初始化。。。");
}
public void cleanUp(){
System.out.println("BeanWithComponent 销毁。。。");
}
}
Класс конфигурации:
@Configuration
@ComponentScan(basePackages = "com.example.domain")
public class ComfigureWithScan {
public ComfigureWithScan(){
System.out.println("spring容器启动初始化。。。");
}
}
Класс тестирования основного метода:
public class TestComponnet {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ComfigureWithScan.class);
BeanWithComponent bean = (BeanWithComponent) context.getBean("beanWithComponent");
bean.sayHello();
System.out.println(bean);
BeanWithComponent bean2 = (BeanWithComponent) context.getBean("beanWithComponent");
System.out.println(bean2);
}
}
Результат выполнения:
10:03:56.791 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'comfigureWithScan'
spring容器启动初始化。。。
10:03:56.796 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'beanWithComponent'
BeanWithComponent sayHello...
com.example.domain.BeanWithComponent@d706f19
com.example.domain.BeanWithComponent@d706f19
Как видно из результатов, использование@Component
Аннотация+@ComponentScan
эквивалентно использованию@Bean
не добавлять@Scope
Annotation, то есть полученный объект bean-компонента является одним и тем же объектом.
4. Два метода регистрации класса AppContext с помощью AnnotationConfigApplicationContext
А. Класс конфигурации регистрируется путем передачи его вAnnotationConfigApplicationContext
Конструктор
public class TestComponnet {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ComfigureWithScan.class);
}
}
Не делайте,AnnotationConfigApplicationContext
Метод регистрации передается в класс конфигурации для регистрации класса конфигурации.
public class TestComponnet {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(ComfigureWithScan.class);
context.refresh();
ApplicationContext ctx = context;
}
}
Этот метод на самом делеAnnotationConfigApplicationContext
Для раздельного использования конструктора обратитесь к исходному коду этой части следующим образом:
public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
this();
this.register(componentClasses);
this.refresh();
}
Примечание. Код этой части в Интернете выглядит следующим образом:
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppContext.class)
}
Мы не знаем, почему они все могут пройти тест, в любом случае, я не могу написать такой код локально, поэтому мы можем только реализовать его по-другому. Взгляните сюдаAnnotationConfigApplicationContext
Диаграмма иерархии структуры классов:
Что касается анализа этого класса, мы узнаем об этом позже.
5. Настройте веб-приложение (AnnotationConfigApplicationContext настраивается в файле web.xml)
Раньше вы обычно использовалиXmlWebApplicationContext
Context для настройки веб-приложения Spring, указав путь к внешнему XML-файлу контекста в файле дескриптора веб-развертывания web.xml.XMLWebApplicationContext
— класс контекста по умолчанию, используемый веб-приложениями. Следующий код описывает файл web.xml, на который будет указыватьContextLoaderListener
Элемент внешнего XML-файла контекста, загружаемый классом прослушивателя.
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>sampleServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
...
</web-app>
Теперь вы измените приведенный выше код в web.xml, чтобы использоватьAnnotationConfigApplicationContext
Добрый. Запомнить,XmlWebApplicationContext
— это реализация контекста по умолчанию, которую Spring использует для веб-приложений, поэтому вам никогда не придется явно указывать этот класс контекста в вашем файле web.xml. Теперь вы будете использовать конфигурацию на основе Java, поэтому при настройке веб-приложения вам нужно будет указать в файле web.xmlAnnotationConfigApplicationContext
Добрый. Приведенный выше код будет изменен следующим образом:
<web-app>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.
support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
demo.AppContext
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>sampleServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.
support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
</servlet>
...
</web-app>
Изменено вышеweb.xml
теперь определеноAnnotationConfigWebApplicationContext
Класс контекста как часть параметров контекста и элементов сервлета. Местоположение конфигурации контекста теперь указывает наAppContext
Класс конфигурации.
Объединение нескольких классов конфигурации
Введите XML-файл конфигурации spring в @configuration.
Класс конфигурации:
@Configuration
@ImportResource("classpath:applicationContext-configuration.xml")
public class TestConfiguration2 {
public TestConfiguration2(){
System.out.println("TestConfiguration2容器启动初始化。。。");
}
// @Bean
// @Scope("prototype")
// public TestBean testBean(){
// return new TestBean();
// }
}
класс бобов:
public class TestBean {
public void sayHello(){
System.out.println("TestBean sayHello...");
}
public void start(){
System.out.println("TestBean 初始化。。。");
}
public void cleanUp(){
System.out.println("TestBean 销毁。。。");
}
}
applicationContext-configuration.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd" default-lazy-init="false">
<bean id = "testBean" class="com.example.domain.TestBean"></bean>
</beans>
Тестовый класс:
public class TestMain2 {
public static void main(String[] args) {
// @Configuration注解的spring容器加载方式,用AnnotationConfigApplicationContext替换ClassPathXmlApplicationContext
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfiguration2.class);
//获取 Bean
TestBean testBean = (TestBean) applicationContext.getBean("testBean");
testBean.sayHello();
System.out.println(testBean);
TestBean testBean1 = (TestBean) applicationContext.getBean("testBean");
System.out.println(testBean1);
}
}
Результат выполнения:
16:35:28.837 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testConfiguration2'
TestConfiguration2容器启动初始化。。。
16:35:28.852 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testBean'
TestBean sayHello...
com.example.domain.TestBean@78aab498
com.example.domain.TestBean@78aab498
Хотя такая комбинация может дать тот же эффект, кажется проще использовать аннотацию @Bean непосредственно в классе конфигурации.
Введите другие конфигурации аннотаций в @configuration
Измените класс конфигурации:
@Configuration
@ImportResource("classpath:applicationContext-configuration.xml")
@Import(TestConfiguration.class)
public class TestConfiguration2 {
}
Остальное содержимое остается без изменений, а результаты выполнения следующие:
16:40:40.239 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'com.example.configuration.TestConfiguration'
TestConfiguration容器启动初始化。。。
16:40:40.239 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testBean'
TestBean sayHello...
com.example.domain.TestBean@12e61fe6
com.example.domain.TestBean@12e61fe6
@configuration вложенность (вложенная конфигурация должна быть статическим классом)
Цель объединения нескольких классов конфигурации достигается путем настройки вложенных классов конфигурации. Но обратите внимание, что внутренний класс должен быть статическим классом.
класс бобов:
package com.example.domain;
@Component
public class BeanWithComponent {
public void sayHello(){
System.out.println("BeanWithComponent sayHello...");
}
public void start(){
System.out.println("BeanWithComponent 初始化。。。");
}
public void cleanUp(){
System.out.println("BeanWithComponent 销毁。。。");
}
}
package com.example.domain;
public class DataSource {
@Override
public String toString() {
return "I am DataSource";
}
}
Класс конфигурации:
@Configuration
@ComponentScan(basePackages = "com.example.domain")
public class ComfigureWithScan2 {
public ComfigureWithScan2(){
System.out.println("spring容器启动初始化。。。ComfigureWithScan2");
}
@Configuration
static class DataConfigure{
@Bean
DataSource dataSource(){
return new DataSource();
}
}
}
Тестовый класс:
public class TestComponnet2 {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ComfigureWithScan2.class);
BeanWithComponent bean = (BeanWithComponent) context.getBean("beanWithComponent");
bean.sayHello();
DataSource dataSource = (DataSource) context.getBean("dataSource");
System.out.println(dataSource);
}
}
Результат выполнения:
16:55:10.429 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'comfigureWithScan2'
spring容器启动初始化。。。ComfigureWithScan2
16:55:10.429 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'beanWithComponent'
16:55:10.429 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'com.example.configuration.ComfigureWithScan2$DataConfigure'
16:55:10.429 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'dataSource'
BeanWithComponent sayHello...
I am DataSource
Ссылка на ссылку: https://www.cnblogs.com/duanxz/p/7493276.html
@EnableAutoConfiguration
@EnableAutoConfiguration
Загрузите все определения bean-компонентов, подходящие для автоматической настройки, в контейнер Ioc с помощью @Import.
@EnableAutoConfiguration
Это также составная аннотация, и ее исходный код выглядит следующим образом:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
Среди них важнейшее@Import({AutoConfigurationImportSelector.class})
, с помощьюAutoConfigurationImportSelector
этот класс,@EnableAutoConfiguration
Это может помочь приложениям SpringBoot загружать все подходящие @configurations в текущий контейнер Ioc, созданный и используемый SpringBoot.
AutoConfigurationImportSelector
До SpringBoot 1.5 использованиеEnableAutoConfigurationImportSelector
, который наследуется отAutoConfigurationImportSelector
, через 1,5,EnableAutoConfigurationImportSelector
Больше не рекомендуется, но рекомендуетсяAutoConfigurationImportSelector
.
когда это выполняется
Он будет использоваться при запуске Springboot.ConfigurationClassParser
разобрать@Configuration
Модифицированный класс конфигурации, а затем обработайте случай, когда класс изменен другими аннотациями, такими как@Import
аннотация,@ComponentScan
аннотация,@Bean
Заметки и т. д.
Если обнаружено, что аннотация существует@Import(ImportSelector)
, создается соответствующий объект importSelector и вызывается его метод selectImports, иAutoConfigurationImportSelector
Это класс реализации ImportSelector. Дополнительный анализ ConfigurationClassParser см. в статье:Примечания к записи на весенние занятия
Таким образом, ConfigurationClassParser создаст экземплярAutoConfigurationImportSelector
и вызовите его метод selectImports().
public String[] selectImports(AnnotationMetadata annotationMetadata) {
if (!this.isEnabled(annotationMetadata)) {
return NO_IMPORTS;
} else {
AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}
}
protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata, AnnotationMetadata annotationMetadata) {
if (!this.isEnabled(annotationMetadata)) {
return EMPTY_ENTRY;
} else {
AnnotationAttributes attributes = this.getAttributes(annotationMetadata);
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
configurations = this.removeDuplicates(configurations);
Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);
this.checkExcludedClasses(configurations, exclusions);
configurations.removeAll(exclusions);
configurations = this.filter(configurations, autoConfigurationMetadata);
this.fireAutoConfigurationImportEvents(configurations, exclusions);
return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);
}
}
Существует метод под названием GetAutoconfigurationEnterentry () в методе Selectimports. Вход и проверьте этот метод, чтобы увидеть код для получения класса конфигурации, в частности, метод getCAndateConfigurations (), нажмите для просмотра его конкретной реализации:
Ключевой класс автоматической конфигурации: SpramFactory
Основная функция SpringFactoriesLoader — запуск из указанного конфигурационного файла.META/spring.factories
Чтобы загрузить конфигурацию, spring.factories — это типичный файл свойств Java, а формат конфигурации — в формате «ключ-значение», за исключением того, что ключ и значение — это полные имена классов типов Java.
Войдя в метод loadFactoryNames(), вы обнаружите, что loadFactoryNames() считывает файл META-INF/spring.factories в ClassPath.
существует@EnableAutoConfiguration
В сценарии больше поддержки функции для поиска конфигурации, то есть по полному имени класса @EnableAutoConfigurationorg.springframework.boot.autoconfigure.EnableAutoConfiguration
В качестве ключа поиска получите соответствующий набор@Configuration
Добрый.
Из-за длины статьи описание аннотации @Component помещено в следующую главу, добро пожаловать на просмотр!