- 提出问题:监听springboot应用的生命周期。应用启动之前做什么事情,应用启动的过程中某一刻做了什么事情,应用启动完成后做了什么事情????
- 谁来做监听这个事情呢?监听器-SpringApplicationRunListener,这是一个接口
- 需要注意的是,
SpringApplicationRunListener
是一个接口,需要自己实现相应的方法。在 Spring Boot 中,还提供了一个默认的实现类EventPublishingRunListener
,用于发布事件和调用其他监听器。通常情况下,可以直接基于EventPublishingRunListener
来实现自定义的应用程序启动监听器。 - 也可以自定义
SpringApplicationRunListener 接口的实现类。并重写SpringApplicationRunListener 接口的方法
自定义SpringApplicationRunListener
来监听事件;- 编写
SpringApplicationRunListener
实现类 - 在 (resources文件下)
META-INF/spring.factories
中配置org.springframework.boot.SpringApplicationRunListener=自己的Listener
,还可以指定一个有参构造器,接受两个参数(SpringApplication application, String[] args)
- springboot 在
spring-boot.jar
中配置了默认的 Listener
- 编写
- 需要注意的是,
- springboot应用生命周期主要分为哪几部分(可以通过监听器来观察和干预 Spring Boot 在不同阶段的生命周期事件)
- /**
* Listener先要从 META-INF/spring.factories(这个就是查找你自定义SpringApplicationRunListener
实现类) 读到
*
* 1、引导: 利用 BootstrapContext 引导整个项目启动
* starting:应用开始,SpringApplication的run方法一调用,只要有了 BootstrapContext 就执行
* environmentPrepared:环境准备好(把启动参数等绑定到环境变量中),但是ioc还没有创建;【调一次】
* 2、启动:
* contextPrepared:ioc容器创建并准备好,但是sources(主配置类)没加载。并关闭引导上下文;组件都没创建 【调一次】
* contextLoaded:ioc容器加载。主配置类加载进去了。但是ioc容器还没刷新(我们的bean没创建)。
* =======截止以前,ioc容器里面还没造bean呢=======
* started: ioc容器刷新了(所有bean造好了),但是 runner 没调用。
* ready: ioc容器刷新了(所有bean造好了),所有 runner 调用完了。
* 3、运行
* 以前步骤都正确执行,代表容器running。
*/
- /**
- 就记住,springboot应用生命周期包括好几个部分,然后这几个部分对应着好几个事件
springboot生命周期监听
最新推荐文章于 2024-12-21 19:46:32 发布