首先进入
@SpringBootApplication注解内里面有自动装配的注解在自定装配里面里面它导入了自动装配选择器
(通过反射获取的自动装配选择器的那个类)。然后进入到自动装配选择器
里面有一个
getCandidateConfigurations方法。通过这个方法获取一个
SpringFactoriesLoader的集合(通过该方法的类名反射获取)
获取然后就加载出在
"META-INF/spring.factories"下的
资源目录
将读取到的资源在通过
loadSpringFactories的方法
一个一个封装在
Properties中最后返回
Properties供人们使用最终指向"META-INF/spring.factories"文件
配置文件和spring.factory的的联系在于spring.factory里面绑定了何种需要用的各种属性(http/mvc/..等等一个类里面一个配置文件)通过configrationproperties注解去加载绑定这些类
spring的底层注解:根据不同的条件,来判断当前配置或者类是否生效!
同时在我们配置文件中能配置这些东西,都是有一定的固有规律
xxxAutoConfiguration是有默认值的然后xxxproperties又和配置文件绑定,我们就可以使用自定义的配置
一句话总结 :根据当前不同的条件判断,决定这个配置类是否生效!
-
一但这个配置类生效;这个配置类就会给容器中添加各种组件;
-
这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
-
所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;
-
配置文件能配置什么就可以参照某个功能对应的这个属性类
-
精髓
1、SpringBoot启动会加载大量的自动配置类
2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类;给容器中添加组件
xxxxProperties:封装配置文件中相关属性
-
面试官问你你可以这样说,springboot是通过main方法下的SpringApplication.run方法启动的,启动的时候他会调用refshContext方法,先刷新容器,然后根据解析注解或者解析配置文件的形式祖册bean,而它是通过启动类的SpringBootApplication注解进行开始解析的,他会根据EnableAutoConfiguration开启自动化配置,里面有个核心方法ImportSelect选择性的导入,根据loadFanctoryNames根据classpash路径以MATA-INF/spring.factorces下面以什么什么EnableAutoConfiguration开头的key去加载里面所有对应的自动化配置,他并不是把这一百二十多个自动化配置全部导入,在他每个自动化配置里面都有条件判断注解,先判断是否引入相互的jar包,再判断容器是否有bean再进行注入到bean容器