Springboot第三章 Springboot启动 总结文

Springboot第三章 Springboot启动 总结文

示例

因为Spring boot的知识点非常多,一个示例不能囊括所有组件应用场景,所有就不写示例了,针对某些组件的应用写个小Demo。

1. SpringApplication实例创建

根据Spring Initializer创建的项目启动时可以分为两步,创建SpringApplication实例,执行springApplication.run方法,
在这里插入图片描述

(一)SpringApplication 实例的创建

1.1 获取WebApplicationType

WebApplicationType#deduceFromClasspath

1.2 SpringApplication 实例的创建 -变量initializers初始化

SpringApplication 实例的创建 -变量initializers初始化

1.3 SpringApplication 实例的创建 -变量listeners-this.setListeners()

SpringApplication 实例的创建 -变量listeners-this.setListeners()

2. springApplication.run方法

二)SpringApplication.run()

这块内容按顺序分析不太好,因为几个重要组件交错执行,为了理解Springboot是如何工作的,对重要组件一一

context的创建与初始化

我们都知道Springboot的IOC特性,容器在Springboot是第一重要的组件,所以Springboot启动的主流程就是创建容器、对容器的初始化(包括对容器属性的初始化、导入相关Bean组件)

在这里插入图片描述

2.1 ConfigurableApplicationContext context = null

首先拿到一个ConfigurableApplicationContext接口,因为run方法返回的就是一个ConfigurableApplicationContext,但是接口是不能作用的,这表名我们在整个过程中的context一定是一个ConfigurableApplicationContext接口的实现类。
在这里插入图片描述

在这里插入图片描述

相关组件
2.4 SpringApplication.createApplicationContext ——根据应用类型实例化相应ConfigurableApplicationContext接口实现类

2.4 context = this.createApplicationContext(); Application.createApplicationContext

相关组件
AnnotatedBeanDefinitionReader

AnnotatedBeanDefinitionReader

AnnotatedBeanDefinitionReader 属性分别在何时初始化

AnnotatedBeanDefinitionReader # registerBean() 系列方法

ClassPathBeanDefinitionScanner

ClassPathBeanDefinitionScanner

2.5 this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);

2.5 this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);

相关组件
Initializer系列组件
ApplicationContextInitializer接口

ApplicationContextInitializer接口

DelegatingApplicationContextInitializer

DelegatingApplicationContextInitializer

SharedMetadataReaderFactoryContextInitializer

SharedMetadataReaderFactoryContextInitializer

ContextIdApplicationContextInitializer

ContextIdApplicationContextInitializer

ConfigurationWarningsApplicationContextInitializer

ConfigurationWarningsApplicationContextInitializer

RSocketPortInfoApplicationContextInitializer

RSocketPortInfoApplicationContextInitializer

ServerPortInfoApplicationContextInitializer

ServerPortInfoApplicationContextInitializer

2.6 this.refreshContext(context)

this.refreshContext(context);

AbstractApplicationContext#refresh

AbstractApplicationContext#refresh

PostProcessorRegistrationDelegate

PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors

this.onRefresh();

this.onRefresh()

createWebServer

createWebServer

this.finishBeanFactoryInitialization(beanFactory);

this.finishBeanFactoryInitialization(beanFactory);

environment的创建与工作

Environment组件

Environment系列

准备Environment

ConfigurableEnvironment environment = this.prepareEnvironment(listeners, applicationArguments);

EnvironmentPostProcessor实现类

EnvironmentPostProcessor实现类

监听器的创建与工作

Springboot 事件监听机制实现

Springboot 事件监听机制实现

1.3 listener的创建
SpringApplicationEvent的处理
2.2 获取运行时监听器 SpringApplicationRunListeners并发布ApplicationStartingEvent事件

SpringApplicationRunListeners listeners = this.getRunListeners(args);

listeners.starting();

发布ApplicationEnvironmentPreparedEvent事件

发布ApplicationEnvironmentPreparedEvent事件

发布ApplicationContextInitializedEvent事件

ApplicationContextInitializedEvent

ApplicationContextEvent的处理
发布ContextRefreshedEvent事件
相关组件
RunListener组件
SpringApplicationRunListeners 组件

SpringApplicationRunListeners

EventPublishingRunListener

EventPublishingRunListener

EventMulticaster 广播组件
AbstractApplicationEventMulticaster

AbstractApplicationEventMulticaster

SimpleApplicationEventMulticaster

SimpleApplicationEventMulticaster

ApplicationListener
处理ApplicationStartingEvent事件的监听器
LoggingApplicationListener

LoggingApplicationListener

BackgroundPreinitializer

BackgroundPreinitializer

DelegatingApplicationListener

DelegatingApplicationListener

LiquibaseServiceLocatorApplicationListener

LiquibaseServiceLocatorApplicationListener

处理ApplicationEnvironmentPreparedEvent事件监听器
ConfigFileApplicationListener

ConfigFileApplicationListener

AnsiOutputApplicationListener
LoggingApplicationListener
ClasspathLoggingApplicationListener
BackgroundPreinitializer
DelegatingApplicationListener
FileEncodingApplicationListener
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值