快速理解SpringBoot的自动装配原理
本文章主要是从代码的角度,跟踪springboot自动装配的原理:
1, 首先我们要知道,根据springboot创建的项目,在启动类中都会有
@SpringBootApplication这个注解,其实所谓的自动装配,也是从这个注解开始,废话不多说,从代码层面跟踪:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7538e3cca1d5eb84b7ac9ef4bd40311a.png)
2,我们进入到@springBootApplication注解,发现他实际上还有@EnableAutoConfiguration进行标记,这个从翻译上来讲,我们应该知道他就是能够自动加载配置的注解,我们继续进入@EnableAutoConfiguration这个注解中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e7db59be5d439c34cae9a82d1d8c4ef8.png)
3,进入到@EnableAutoConfiguration,注意一下,有一个导入Bean的注解@Import({AutoConfigurationImportSelector.class}),@Import注解主要用于导入某些特殊的Bean,这些特殊的Bean和Bean Definitaion 有关,那我们可以进入AutoConfigurationImportSelector.class这个类里面,去跟踪那些bean会被加载导入
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3b1836cca40fd2b2e5a1432665ae8555.png)
4,进入AutoConfigurationImportSelector.class类中,我们可以看到有一个process()方法,通过这个方法的调用,可以获取到所有要加载的bean,(至于为什么会执行这个方法,简单来说就是通过解析注解,然后一步步调用走到这个方法的,这里不做描述)我们继续跟踪这个方法的实现,发现内部调用的是getAutoConfigurationEntry()这个方法,我们可以进去进入到getAutoConfigurationEntry()方法进行跟踪,
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9a629010caadcc557d50eb718def5bc2.png)
5,进入到getAutoConfigurationEntry()这个方法中,我们可以发现,这个方法内部是调用的getCandidateConfigurations()来获取所有的配置信息,我们继续跟踪getCandidateConfigurations()方法,看是如何拿到或者得知那些bean是要被加载的。
6,进入到这个getCandidateConfigurations()方法中以后,其实我们就应该很清楚,他是从哪加载的bean了,我们不需要关注他加载的过程,我们只需要看到他那个断言,就会发现,它实际上是要去找所有META-INF/spring.factories这个文件,我们可以继续跟踪loadFactoryNames()方法看如何加载的META-INF/spring.factories
7,打开spring.factories这个文件,会发现,实际上,这个文件存储的是以key-value形式存储的各个要加载的类的路径,通过这个文件中的配置的路径,就可以找到相应的类,而每一个类中,都会有相应的方法处理去加载bean并放入ioc容器,自动装配的bean就是通过org.springframework.boot.autoconfigure.EnableAutoConfiguration这个key找到符合条件的bean并加入到ioc容器
以上就是整个springboot自动装配的基本流程,主要是方便道友如何快速的了解springboot的自动装配,欢迎大家提意见,我们共同学习。