码迷,mamicode.com
首页 > 编程语言 > 详细

Springboot生命周期

时间:2020-01-10 00:57:31      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:imp   上下文   command   ring   initial   它的   tin   加载   comm   

ApplicationContextInitializedEvent
当 SpringApplication 启动并且准备好 ApplicationContext,并且在加载任何 bean 定义之前调用了 ApplicationContextInitializers 时发布的事件。对应的生命周期方法是contextPrepared()

ApplicationPreparedEvent
ApplicationPreparedEvent 是SpringBoot上下文 context 创建完成是发布的事件;但此时 spring 中的 bean 还没有完全加载完成。这里可以将上下文传递出去做一些额外的操作。但是在该监听器中是无法获取自定义 bean 并进行操作的。对应的生命周期方法是 contextLoaded()。

ApplicationStartedEvent
这个事件是在 2.0 版本才引入的;具体发布是在应用程序上下文刷新之后,调用任何 ApplicationRunner 和 CommandLineRunner 运行程序之前。

SpringApplicationRunListeners

    SpringApplicationRunListeners 是一个集合类,内部包含一个 log 和包含 SpringApplicationRunListener 的 List。而 SpringApplicationRunListener 主要是监听 SpringApplication 对象的,里面的方法都定义了在何时调用 SpringApplicationRunListener 的各种方法,它的实现类是EventPublishingRunListener。它就是一个ApplicationListener的代理。springboot启动的几个主要过程的监听通知都是通过他来进行回调,它的生命周期就是从开始启动,到启动结束。

    下面的每一个方法 SpringApplicationRunListener 都把其包装成一个事件,在spring容器还未成功 refreshed 之前都是使用SimpleApplicationEventMulticaster 去寻找对该事件感兴趣的ApplicationListener,然后调用其onApplicationEvent方法

starting:当SpringApplication对象的run方法刚启动的时候(依靠SimpleApplicationEventMulticaster)

environmentPrepared:在environment Prepared 但是spring容器还未创建的时候(依靠SimpleApplicationEventMulticaster)

contextPrepared:当spring容器已经创建且准备好了,(目前是空的实现)

contextLoaded:当spring容器已经loaded 且未refresh 。load就是将我们的primaryClass注册到spring容器中,(依靠SimpleApplicationEventMulticaster) 同时将之前获取到的ApplicationListener都加入到spring容器中,此时如果ApplicationListener还是ApplicationContextAware的也要调用其setApplicationContext方法。

started:spring容器已经刷新过且应用已经启动,但是CommandLineRunners和ApplicationRunners还未调用,直接通过spring容器自己发送(因为ApplicationListener已经加入spring容器)

running:我们已经调用了CommandLineRunners,直接通过spring容器自己发送(因为ApplicationListener已经加入spring容器)

failed:当异常发生的时候就调用这个,如果spring容器没有loaded 或者没有激活就使用SimpleApplicationEventMulticaster,否则还是依靠spring容器自己。

Springboot生命周期

标签:imp   上下文   command   ring   initial   它的   tin   加载   comm   

原文地址:https://www.cnblogs.com/nizuimeiabc1/p/12174019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!