springboot 启动原理
spring 容器启动过程
1 new applicationcontext()
2 这个方法 1 读取配置类 2 调用refresh()
3 refresh()--> 1 invokeBeanFactoryPostProcess(beanFactory)---> 把配置类解析成临时的beanDefinition。
2 finishBeanFactoryInitialization(beanFactory)----> 把beanDefinition解析成最终我们使用的spring ioc bean。
spring boot 启动过程
new springApplication.run
1 new springApplication --->1 new applicationcontext 2 读取全局配置文件 3 把当前启动类当成配置类去加载ioc.因为启动类上面有@ComponentScan ,这个注解告诉了我们怎么去加载类。
4 根据classpath 下的类,推算当前web应用类型(webFlux, servlet),也就是获得webApplicationType。
5 去spring.factories 中去获取所有key:org.springframework.context.ApplicationContextInitializer 这个类主要作用就是对外扩展
6 去spring.factories 中去获取所有key: org.springframework.context.ApplicationListener 这个类主要是解耦的
2 run
1.记录当前springboot启动耗时
2.发布1.ApplicationStartingEvent事件,在运行开始时发送,用了spring事件多播器,发布了事件,就意味着有对应的监听器要干活。
3.发布applicationEnvironmentPreparedEvent 事件,对应的环境变量监听器就会加载 全局配置文件。
4.根据获得的webApplicationType,创建spring上下文。
5.初始化上下文。
6.调用spring的refresh()方法,完成所有bean和自动配置类,生成ioc容器。
启动tomcat ,也是在refresh(),重写了这个方法的 onRefresh()方法。

浙公网安备 33010602011771号