目录
按照springboot约定方式使用其框架可以自动将类实例化和生命周期管理,即IOC,正常情况只需要一个启动类,重点分析下@SpringBootApplication注解如何实现类的自动扫描和装配,以及启动过程。
- @SpringBootApplication
- public class MyApplication {
- public static void main(String[] args) {
- SpringApplication.run(MyApplication.class, args);
- }
- }
@SpringBootApplication是个组合注解,包括:
1.@SpringBootConfiguration: 本质上是@Configuration注解,@Configuration等价于
2.@EnableAutoConfiguration :扫描spring.factories文件,自动配置;
3.@ComponentScan: 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器,这里会排除spring.factories文件的value;

重点关注的是@EnableAutoConfiguration和@ComponentScan注解
它也是一个组合注解,首先关注@Import(AutoConfigurationImportSelector)这个注解,@Import这个注解类是用于导入配置类可以理解java程序中的Import 包.类;那么导入AutoConfigurationImportSelector有什么用呢;

AutoConfigurationImportSelector是一个接口,其有一个方法getAutoConfigurationEntry(),

该方法读取spring.factories中的所有配置类列表:

最终@EnableAutoConfiguration注解实现的作用就是META-INF/spring.factories配置文件的value进行排序过滤进行实例化;

@EnableAutoConfiguration还有个@AutoConfigurationPackage注解是做什么用的,其实就是个包路径,也就是作用范围的指定。
将添加该注解的类所在的package 作为 自动配置package 进行管理,@Import(AutoConfigurationPackages.Registrar)表示对于使用了该注解的类所在的包,应当使用AutoConfigurationPackages注册。

注册类和方法如下:自动扫描同级及以下的包,如果有包在@AutoConfigurationPackage注解范围以上扫描不到.

@ComponentScan用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类注册到IOC容器中。会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。
@EnableAutoConfiguration注解实现了spring.factories中配置类的自动配置,@ComponentScan实现了用户指定的类的自动注入;

