1、自动装配是什么及作用
springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配
的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理
2、spring自动装配的原理
2.1、启动类上注解的作用
这个注解是springboot启动类上的一个注解,是一个组合注解,也就是由其他注解组合起来,它的
主要作用就是标记说明这个类是springboot的主配置类,springboot应该运行这个类里面的main()
方法来启动程序
这个注解主要由三个子注解组成:
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
@SpringBootConfiguration
这个注解包含了@Configuration,@Configuration里面又包含了一个@Component注解,也就是
说,这个注解标注在哪个类上,就表示当前这个类是一个配置类,而配置类也是spring容器中的组
件
@EnableAutoConfiguration
这个注解是开启自动配置的功能,里面包含了两个注解
- @AutoConfigurationPackage
- @Import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackage
这个注解的作用说白了就是将主配置类(@SpringBootApplication标注的类)所在包以及子包里面
的所有组件扫描并加载到spring的容器中,这也就是为什么我们在利用springboot进行开发的时
候,无论是Controller还是Service的路径都是与主配置类同级或者次级的原因
@Import(AutoConfigurationImportSelector.class)
上一个注解我们把所有组件都加载到了容器里面,这个注解就是将需要自动装配的类以全类名的方
式返回,那是怎么找到哪些是需要自动装配的类呢?
1、AutoConfigurationImportSelector这个类里面有一个方法selectImports(),如下
2、在selectImport()方法里调用了一个getAutoConfigurationEntry()方法,这个方法里面又调用
了一个getCandidateConfigurations()方法
3、在getCandidateConfigurations()方法里面调用了loadFactoryNames()方法
4、loadFactoryNames()方法里面又调用了一个loadSpringFactories()方法
5、关键就在这个loadSpringFactories()方法里面,在这个方法里,它会查找所有在META-INF路
径下的spring.factories文件
6、在META-INF/spring.factories这个文件里面的数据是以键=值的方式存储,然后解析这些文
件,找出以EnableAutoConfiguration为键的所有值,以列表的方式返回
@ComponentScan
这个注解的作用就是扫描当前包及子包的注解