1.利用springboot创建一个项目
@SpringBootApplication注解
注意三个注解:
- @ComponentScan 扫描包,添加到spring的IOC容器中.
- @SpringBootConfiguration
- @EnableAutoConfiguration 开启自动装配
在spring中有一些列的@Enable注解,他的主要作用就是把相关组件的Bean装配到IOC容器中.如果是基于JavaConfig的形式完成Bean的装载,则必须要使用@Configuration和@Bean的注解.@Enable注解本质就是对这两个注解的封装.通常@Enable注解都会伴随着@Import注解.
比如:@EnableWebMVC,@EnableScheduling
因此,使用@Enable注解之后,spring会解析到@Import导入的配置类,从而根据这个配置类中的描述来实现Bean的装配.
@EnableAutoConfiguration注解
@AutoConfigurationPackage 这个注解作用是将使用该注解的类所在的包及其子包下所有组件扫描到spring的IOC容器中.
@Import注解会将AutoConfigurationImportSelector类注入到spring的IOC容器
AutoConfigurationImportSelector类
这个类实现了ImportSelector接口,要实现selectImports方法.和@Configuration不同的是,ImportSelector可以实现批量装配,还可以根据上下文来决定哪些类能够给IOC容器初始化.
进入getAutoConfigurationEntry()方法
这个方法会扫描到指定路径下的文件接地得到需要装配的配置类.重点关注getCandidateConfigurations()方法:
进入loadFactoryNames()方法:
进入loadSpringFactories()方法:
最终发现,它会读取MATA-INF/spring.factories文件里的内容.
这个文件里包含各种配置类.随便打开一个:
@EnableConfigurationProperties是属性配置,也就是说我们可以按照约定在application.properties文件中配置rabbitMQ的参数.
@Condition 条件装配注解
总结一下:
- 1.@SpringBootApplication
- 2.@EnableAutoConfiguration
- @Import(AutoConfigurationImportSelector.class)实现配置类的导入
- AutoConfigurationImportSelector 的selectImports方法实现选择性批量配置类的装配
- 通过spring提供的SpringFactoriesLoader机制,扫描classpath路径下META-INF/spring.factories,读取需要实现自动装配的配置类.
- 通过条件筛选的方式,把不符合条件的配置类移除,最终实现自动装配.