Springboot实现自动配置的原理
或许有人会有疑问,Spring的配置没写,Springboot的配置也没写,那是怎样实现自动配置的呢?
在Springboot启动的时候会去springboot的自动配置中去寻找一个 spring.factories的文件, 然后在这个文件中找到Springboot能够整合的所有第三方框架的自动配置,找到之后 ,在每一个配置文件中都有一个条件注解。通过条件注解判断,我们这个配置文件是否生效 。如果条件注解成立,那么才生效 。如果是条件注解不生效 ,那么配置文件也就不会生效。
源码图解:
1.进入run方法
2.再次进入
3.原来都是静态方法,但是进入这里之后为什么要new一个呢,可能里面有一些操作,进去看看。
4.执行到了这个构造器,进去看看干了啥。
5.设置初始化话器(看一个构造器的方法在图里面,看源码总结的方法)
6.它通过一个getSpringFactoriesInstances方法获取工厂实例,点进去看看
7.如何获取过程实例
8.如何加载工厂呢,进入loadFactoryNames
9.进入loadSpringFactories看看(发现最终是找到了spring.factories这个文件)
10.因此,就知道了下一步要去找自动配置的包
11.进入spring.factories(由于2.7.4的版本不好讲解就我就换成1.5.2的来更直观点)
可以看出spring.factories自动装配了很多包,但是问题来了,运行程序时这些都会执行一遍吗?
并不是
12.随机进入一个里面看看(原来里面有条件注解,也就是满足了才能生效)
打个比方,就比如去餐馆点菜(运行程序),老板会跟你说菜有没有(判断),有就上(生效),没有就不上(不生效)。
原理讲了,那么可能会有人问:
springboot假设已经使能了配置文件 我们也配置了文件,那两者是不是就冲突了呢?(不冲突)
原因:因为我们的配置文件的放到IOC容器去的对象上也存在条件注解,并判断在IOC容器中是否已经存在。如果存在 ,那么就不会再次配置了。
以上知识只是本人对Springboot基础的一些见解,如知识点有问题,请联系我修改,之后会更新Springboot基础使用的内容