目录
编辑 2.2 @EnableAutoConfiguration
2.2.1 @AutoConfigurationPackage
2.2.2 @Import({AutoConfigurationImportSelector.class})
1 什么是自动装配
自动装配就是将官方写好的的配置类加载到spring容器,然后根据配置类生成一些项目所需要的bean对象。(对于springBoot来讲,就是从spring.factories文件获取到对应需要进行自动装配的类,并生成相应的bean对象交给spring管理。)
2 Spring自动装配原理
要想搞明白spring自动装配的原理,就需要从我们springBoot上启动类的注解入手。
该注解是springBoot启动类的一个注解,是一个组合注解,主要作用就是说明这个类是springBoot的主配置类。该注解主要由三个注解组成
@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
2.1 @SpringBootConfiguration
这个注解包含了@Configuration,@Configuration里面又包含了一个@Component,也就是说这个注解标记在哪个类上,那么这个类就是spring的配置类。
2.2 @EnableAutoConfiguration
这个注解是开启了自动配置的功能
2.2.1 @AutoConfigurationPackage
这个注解的作用就是将主配置类(就是有SpringBootApplication标注的类)的所在包以及子包里面的所有容器扫描并加载到spring容器里面,这也就是为什么平时在springboot开发时,我们缩写的controller层和service路径都与朱配置类同级或者次级的原因。
2.2.2 @Import({AutoConfigurationImportSelector.class})
上个注解是将所有的组件都加载到了容器里面,那这个注解就是将所有需要自动装配的类以全类名的形式返回,那么接下里我们就来说一说哪些是需要自动装配的类。
1.AutoConfigurationImportSelector类中有一个selectImports()方法,该方法又调用了getAutoConfigurationEntry这个方法,如下:
2 getAutoConfigurationEntry()方法中又调用了getCandidateConfigurations()这个方法
3 在getCandidateConfigurations()方法中又调用了loadFactoryNames()方法
4 在loadFactoryNames()方法中又调用了loadSpringFactories()方法
5 在loadSpringFactories() 方法中加载了META-INF目录下的spring.factories文件
6 在META-INF/spring.factories这个文件里面的数据是以键=值的方式存储,然后解析这些文件
2.3 @ComponentScan
这个注解的作用就是扫描当前包及子包的注解