* 2. 当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,* 默认生命周期处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值 。* 如果为“true”,则该方法会被调用,而不是等待显式调用自己的start()方法 。*/@Overridepublic void start() {System.out.println("MySmartLifecycle容器启动完成 ...");running = true;}/*** 接口Lifecycle子类的方法,只有非SmartLifecycle的子类才会执行该方法 。
* 1. 该方法只对直接实现接口Lifecycle的类才起作用,对实现SmartLifecycle接口的类无效 。
* 2. 方法stop()和方法stop(Runnable callback)的区别只在于,后者是SmartLifecycle子类的专属 。*/@Overridepublic void stop() {System.out.println("MySmartLifecycle容器停止 ...");running = false;}/*** 1. 只有该方法返回false时,start方法才会被执行 。
* 2. 只有该方法返回true时,stop(Runnable callback)或stop()方法才会被执行 。*/@Overridepublic boolean isRunning() {System.out.println("MySmartLifecycle检查运行状态 ...");return running;}/*** 如果有多个实现接口SmartLifecycle的类,则这些类的start的执行顺序按getPhase方法返回值从小到大执行 。
* 例如:1比2先执行,-1比0先执行 。stop方法的执行顺序则相反,getPhase返回值较大类的stop方法先被调用,小的后被调用 。**/@Overridepublic int getPhase() {return 0;}}关于每个方法的功能,注释部分已经明确说明了,下面启动SpringBoot项目,打印日志如下:
MySmartLifecycle检查运行状态 ...MySmartLifecycle容器启动完成 ...关闭SpringBoot项目,打印日志如下:
MySmartLifecycle检查运行状态 ...MySmartLifecycle容器停止,执行回调函数MySmartLifecycle容器停止 ...通过上述实例可以看出:如果一个Bean实现了SmartLifecycle接口,则会执行启动方法 。SmartLifecycle#isRunning判断是否已经执行,返回false表示还未执行,则调用SmartLifecycle#start()执行 。
当关闭时,同样先检查运行状态,如果正在运行,则执行关闭操作 。关闭时,还可以处理对应的回调函数 。
其中,Phased返回值越小,优先级越高 。
小结当需要基于Spring容器的生命周期来处理一些逻辑时,通常可以实现SmartLifecycle接口来完成 。像Spring Cloud,Spring Boot中都有大量的实践案例 。所以,无论实战或阅读源码,不了解Lifecycle相关接口,都是一种损失 。本文的产生也是在遇到Spring Cloud集成Nacos的源码中获得的灵感 。
- 关于三国的单机游戏 三国类游戏大全单机版
- 爱丽丝梦游仙境前传攻略 游戏爱丽丝梦游仙境攻略
- 比较逗的情侣游戏名 比较皮的情侣游戏名字
- 古风游戏名字男生清冷孤傲 游戏名字男生冷漠古风
- 让人眼前一亮的游戏id
- 好听的女生游戏名字带符号 好听游戏名字女带符号
- 三国题材的大型单机游戏 三国题材游戏排行榜
- Java游戏破解版 java破解版我的世界下载
- 香肠派对2020最新版 香肠派对游戏解说
- 游戏英文名男生霸气帅气的 霸气的游戏英文名字男
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
