Spring容器生命周期--Lifecycle
原文网址:Spring容器生命周期--Lifecycle_IT利刃出鞘的博客-CSDN博客
简介
Bean的初始化方法和销毁方法是Bean生命周期级别的;而Lifecycle是容器生命周期级别的。如果我们想在容器本身的生命周期(比如容器启动完成后、停止之前)事件上做一些工作,可以使用LifeCycle接口。
源码
public interface Lifecycle {void start();void stop();boolean isRunning();
}
- start:如果类A没在运行(isRunning返回false),则走该方法;否则不走该方法
- stop:如果类A在运行(isRunning返回true),则走该方法;否则不走该方法
- isRunning:返回true表示类A已经运行,返回false表示类A没运行
简单示例
isRunning返回true
代码
package com.example.config;import org.springframework.context.Lifecycle;
import org.springframework.stereotype.Component;@Component
public class MyLifeCycle implements Lifecycle {@Overridepublic void start() {System.out.println("start");}@Overridepublic void stop() {System.out.println("stop");}@Overridepublic boolean isRunning() {System.out.println("isRunning");return true;}
}
结果
启动时无打印
关闭时:
isRunning
stop
isRunning返回false
package com.example.config;import org.springframework.context.Lifecycle;
import org.springframework.stereotype.Component;@Component
public class MyLifeCycle implements Lifecycle {@Overridepublic void start() {System.out.println("start");}@Overridepublic void stop() {System.out.println("stop");}@Overridepublic boolean isRunning() {System.out.println("isRunning");return false;}
}
结果
启动时无打印
关闭时
isRunning
改动isRunning值
我本以为,手动改isRunning返回值即可让它既执行start()又执行stop(),但我错了,如下所示:
package com.example.config;import org.springframework.context.Lifecycle;
import org.springframework.stereotype.Component;@Component
public class MyLifeCycle implements Lifecycle {private volatile boolean running = false;@Overridepublic void start() {System.out.println("start");running = true;}@Overridepublic void stop() {System.out.println("stop");}@Overridepublic boolean isRunning() {System.out.println("isRunning");return running;}
}
结果
启动时无打印
关闭时:
isRunning
显式调用start()
在上边“简单示例” 可以发现,无论怎么搞,都调用不到start()方法!!。有人说必须显式去调用它,如下所示:
public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("com.example.config.MyLifecycle");ctx.start();ctx.close();
}
但是,我只看到如下输出:
19:20:23.914 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3ab39c39
19:20:23.924 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
19:20:23.944 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
19:20:23.944 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
19:20:23.944 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
19:20:23.944 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
19:20:23.964 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.liveBeansView.mbeanDomain' in PropertySource 'systemProperties' with value of type String
19:20:23.974 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@3ab39c39, started on Tue Mar 09 19:20:23 CST 2021
19:20:23.974 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.liveBeansView.mbeanDomain' in PropertySource 'systemProperties' with value of type String
对此,该有一张黑人问号脸。。。留到以后再看为什么会这样吧
SmartLifecycle
见 :Spring容器生命周期--SmartLifecycle的用法_IT利刃出鞘的博客-CSDN博客
Spring容器生命周期--Lifecycle相关推荐
- Spring容器生命周期
Spring容器生命周期 执行ConfigurableApplicationContext.refresh() 方法是Spring容器生命周期开始的主要入口点. 而调用BeanDefinitionRe ...
- Spring.容器生命周期
目录 容器生命周期图 生命周期解析 容器 BeanFactoryPostProcessor Bean外 BeanPostProcessor InstantiationAwareBeanPostProc ...
- SpringBoot : Spring容器生命周期管理:SmartLifecycle
1.美图 2.Spring 容器简介 参考:Spring 容器简介 3.SmartLifeCycle简介 SmartLifeCycle是一个接口,具体继承关系如下: 如上图所示,在继承了Lifecyc ...
- tomcat 容器生命周期lifecycle
1.复习java的事件机制 java事件机制包括三个部分:事件.事件监听器.事件源. 事件:一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息. 事件监听器:实 ...
- Spring IOC容器生命周期阶段总结
Spring IOC容器生命周期 BeanFactory和ApplicationContext有何区别? 源码展示 1. Spring应用上下文启动准备阶段 2. BeanFactory创建阶段 3. ...
- Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02
文章目录 Pre 通俗流程 finishBeanFactoryInitialization Pre Spring5源码 - 06 Spring Bean 生命周期流程 概述 01 接上文 通俗流程 下 ...
- Spring Bean默认配置为单实例 Spring Bean生命周期
2019独角兽企业重金招聘Python工程师标准>>> Spring 的Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" ...
- spring bean生命周期_Spring中bean的生命周期和扩展点有哪些?
前言 今天和大家分享一下Spring中Bean的生命周期的一些知识.先来说一下什么是生命周期吧,生命周期从其语义上理解就是一个对象从产生到销毁的整个过程,之所以把这个过程称为生命周期是因为其就像一个生 ...
- Spring Bean生命周期过程
Spring Bean生命周期过程 Spring Bean生命周期指的是Bean加载Spring容器的过程,单例的Bean与多例的Bean加载过程是不一样的.这里指的是单例Bean的加载过程. 图:S ...
最新文章
- 认识一下Global.asa 文件
- 大型电商项目3.0实战+支付宝、微信支付项目实战
- 安全多方计算新突破!阿里首次实现“公开可验证” 的安全方案
- 【java8新特性】——lambda表达式与函数式接口详解(一)
- 百度搜索大批前高管加盟字节跳动;Kali Linux 2020.3发布| 极客头条
- php在浏览器输入路径,关于在sublime text 3 中配置一键浏览器打开php文件,并且是在localhost 本地服务器路径下...
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
- Zookeeper - zookeeper安装与配置
- 个人Web自动化测试学习点总结
- NetworkManager 替代工具 wicd
- 162-SOP8液晶手写板专用IC
- PHP获取服务器图片并添加水印
- OpenTracing 详解
- H5: 关于底部导航使用“fixed”会遮住网页最下面内容的解决办法!
- PLC模拟量数据的处理
- python爬取《你好, 李焕英》豆瓣评论数据
- Ubuntu 22.04正式发布, 更像苹果了
- 选择结构程序设计 思维导图
- C++羽毛球馆场地预定系统
- Excel记录指定文件夹下的所有文件名;批量解压压缩包,处理压缩包套压缩包问题;