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()方法。

 

posted @ 2022-03-31 01:24  亢🐉有悔  阅读(49)  评论(0)    收藏  举报