编程语言爱好者Java服务器端编程JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统

SpringBoot启动流程说明

2021-03-02  本文已影响0人  迦叶_金色的人生_荣耀而又辉煌

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


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核心设计理念和核心组件
<<<SpringBoot中有哪些starter
<<<如何自定义SpringBoot starter
<<<SpringBoot常用注解及外部jar包注入方式
<<<SpringBoot之web开发
<<<SpringBoot全局异常捕获
<<<SpringBoot整合各种持久层技术
<<<SpringBoot整合Mybatis分页插件
<<<SpringBoot使用Atomikos技术整合多数据源
<<<SpringBoot实现热部署
<<<SpringBoot性能调优
<<<SpringBoot的Actuator监控和Admin-UI可视化
<<<SpringBoot常见面试问题

上一篇下一篇

猜你喜欢

热点阅读