众所周知,SpringBootApplication是一个复合注解,包括@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
三个部分。
SpringBootConfiguration
@Configuration
public @interface SpringBootConfiguration {
}
这个注解就是@Configuration注解套了一层皮,很明显表示当前类是一个注解类,我们可以在主启动类里进行Bean的注入,但一般不会这么做。
ComponentScan
EnableAutoConfiguration注解
这是一个复合注解,包括两个部分。
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
}
AutoConfigurationPackage
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}
这个注解往spring中注入了一个Register的实例, 该类会将注解所在的目录下的所有bean注入到spring容器中。
AutoConfigurationImportSelector
将meta-info/spring.factory中依赖的类注入到spring容器中。