@SpringBootApplication ---->1.1、@SpringBootConfiguration
1.2、@EnableAutoConfiguration 自动导入包的一个文件
1.3、@ComponentScan 扫描当前主启动类的包
1.1----->@Configuration------>@component
1.2--->@AutoConfigurationPackage---> @Import({AutoConfigurationPackages.Registrar.class}) 自动注册包
@Import({AutoConfigurationImportSelector.class}) 自动选择器看选择了很么东西-----> 获得getAutoConfigurationEntry方法--->getCandidateConfigurations()获取候选的配置
------>loadSpringFactory() 获得项目资源和系统资源,从这些资源中遍历所有的nextElement(自动配置) 遍历完成以后封装为一个properties供我们使用
注:自动配置有一个核心注解叫ConditionalOnClass用来判断是否生效,如果条件都满足才能生效。所以说上面都读取后需要一个Start才能实现。
结论:
SpringBoot所有的自动配置都在启动类中被加载,springboot的Meta-INF的springfactories包含了所有的自动配置类。但是不一定生效,需要判断条件是否成立。有starter才能使得自动装配生效随后就可以配置成功了。
具体步骤
1、springboot启动的时候需要在META-INF----->spring.factories获取指定的值
2、将这些自动配置的类倒入容器,自动配置类就会生效,帮我们自动配置。
3、以前我们需要配置的文件,boot自己便帮我们做了
4、整合JAVAEE 解决方案和自动配置的东西都在Spring-boot-autoconfigure-2.2.jar.
5、他会把所有的需要导入的组件,以类名的方式返回,这些组件就会被添加到容器中。
6、容器中也会存在非常多的*****AutoConfiguration的文件,这些类给容器中导入了这些场景中的所有组件。
Run方法的运行过程:
1、构造方法:首先推断你是不是WEB方法,其次加载所有的初始化器,然后设置所有的程序监听器,最后推断并且设置Main方法的定义类
2、run(),实例化对象,初始化监听器,装配环境参数,打印banner,上下文区域刷新,报告异常获取,核心就是JavaConfig @Configraion
总结:先判断是web方法与否,第二个推断main方法的主类,监听器处理上下文,全面接管SpringMVC的配置。