springboot listener_Springboot学习(三)启动过程SpringApplication详解

SpringBoot的启动很简单

@SpringBootApplication
  • 静态方法run方式,会构造一个SpringApplication的实例,然后再调用这里实例的run方法就表示启动SpringBoot。
return 
  • new SpringApplication(primarySources) 实例化过程
public 
  • applicationContextInitializer,应用程序初始化器,做一些初始化的工作
  • ApplicationListener,应用程序事件(ApplicationEvent)监听器,应用程序事件(ApplicationEvent)有应用程序启动事件(ApplicationStartedEvent),失败事件(ApplicationFailedEvent),准备事件(ApplicationPreparedEvent)等,而应用程序事件监听器跟监听事件是绑定的。比如ConfigServerBootstrapApplicationListener只跟ApplicationEnvironmentPreparedEvent事件绑定。

run方法

v2-c683b7bc08e2c91fc0664dd9ec48404d_b.jpg

要理解上述代码首先需要先理解 观察者模式

SpringApplicationRunListeners

v2-fae4bfa55659d7e739a305676838ed09_b.jpg

RunListener是发布者,listener是订阅者。注意区别

public 

总结

new SpringApplication(primarySources) 实例化过程

  1. 把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数。本文的例子中这个sources就是MyApplication的class对象
  2. 判断是否是web程序,并设置到webEnvironment这个boolean属性中
  3. 找出所有的初始化器,默认有5个,设置到initializers属性中
  4. 找出所有的应用程序监听器,默认有9个,设置到listeners属性中
  5. 找出运行的主类(main class)

run方法

  1. 构造一个StopWatch,观察SpringApplication的执行
  2. 找出所有的SpringApplicationRunListener并封装到SpringApplicationRunListeners中,用于监听run方法的执行。监听的过程中会封装成事件并广播出去让初始化过程中产生的应用程序监听器进行监听
  3. 构造Spring容器(ApplicationContext),并返回
    3.1 创建Spring容器的判断是否是web环境,是的话构造AnnotationConfigEmbeddedWebApplicationContext,否则构造AnnotationConfigApplicationContext
    3.2 初始化过程中产生的初始化器在这个时候开始工作
    3.3 Spring容器的刷新(完成bean的解析、各种processor接口的执行、条件注解的解析等等)
  4. 从Spring容器中找出ApplicationRunner和CommandLineRunner接口的实现类并排序后依次执行

本质上springboot的启动过程的核心仍然是spring容器创建

只是在容器创建的基础上增加了监听|事件机制,从而可以扩展功能。

?究竟发布事件后,各监听器做了什么事情还没有了解

v2-bffc9f0c3f70a5d605179411ec8b9fd9_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值