SpringBoot启动流程说明

上一篇 <<<如何自定义SpringBoot starter
下一篇 >>>SpringBoot常用注解及外部jar包注入方式


SpringBoot启动流程说明_第1张图片

1.new SpringApplication

a、获得webApplicationType,目前支持三种,响应式启动reactive,需引入spring-boot-starter-webflux包,是spring5的新特性;servlet启动,需引入spring-boot-starter-web包,满足不了上面两种的则为None,不会嵌入启动服务器,需要依赖外部服务器。
b、读取META-INF/spring.factories包下的ApplicationContextInitializer配置并初始化
c、读取META-INF/spring.factories包下的ApplicationListener配置并初始化
d、获取当前运行的主函数

2.run方法

a、读取META-INF/spring.factories对应SpringApplicationRunListener装配到集合
b、循环调用监听的starting方法listeners.starting();
c、装载所有资源文件prepareEnvironment,默认名称application,支持properties、 xml、yml和yaml四种扩展名,优先级为先找file:./config/、file:./、classpath:/config/、classpath:/。
要想加载自定义的扩展名,可继承SpringApplicationRunListener和Ordered,重写方法environmentPrepared加入即可,getOrder返回优先级。同时需要模拟加载顺序,自定义META-INF/spring.factories里添加org.springframework.boot.SpringApplicationRunListener=com.jgspx.listener.MyPropertiesListener
d、打印banner信息printBanner(environment);
e、根据不同的webApplicationType创建上下文createApplicationContext();--AnnotationConfigServletWebServerApplicationContext
f、刷新上下文refreshContext(context);
a)实际调用createWebServer()方法,此时使用到注解@SpringBootApplication,加载资源文件中的server.port等信息并手动创建tomcat容器。【支持tomcat、jetty和undertow】
b)加载资源文件中的spring.mvc前缀信息手动创建SpringMVC的DispatcherServlet beanName:dispacherServlet
g、空模板供子类实现重写上下文完成后的操作afterRefresh(context, applicationArguments);
h、使用广播和回调机制通知监听器SpringBoot容器启动成功listeners.started(context);
i、使用广播和回调机制通知监听器SpringBoot容器启动成功并运行中listeners.running(context);

3.返回上下文之后的操作

可以获取bean等其他操作


SpringBoot启动流程说明_第2张图片

推荐阅读:
<< << <<<如何自定义SpringBoot starter
<< << << << << << << << << <<

你可能感兴趣的:(SpringBoot启动流程说明)