原文网址: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相关推荐

  1. Spring容器生命周期

    Spring容器生命周期 执行ConfigurableApplicationContext.refresh() 方法是Spring容器生命周期开始的主要入口点. 而调用BeanDefinitionRe ...

  2. Spring.容器生命周期

    目录 容器生命周期图 生命周期解析 容器 BeanFactoryPostProcessor Bean外 BeanPostProcessor InstantiationAwareBeanPostProc ...

  3. SpringBoot : Spring容器生命周期管理:SmartLifecycle

    1.美图 2.Spring 容器简介 参考:Spring 容器简介 3.SmartLifeCycle简介 SmartLifeCycle是一个接口,具体继承关系如下: 如上图所示,在继承了Lifecyc ...

  4. tomcat 容器生命周期lifecycle

    1.复习java的事件机制 java事件机制包括三个部分:事件.事件监听器.事件源. 事件:一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息. 事件监听器:实 ...

  5. Spring IOC容器生命周期阶段总结

    Spring IOC容器生命周期 BeanFactory和ApplicationContext有何区别? 源码展示 1. Spring应用上下文启动准备阶段 2. BeanFactory创建阶段 3. ...

  6. Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02

    文章目录 Pre 通俗流程 finishBeanFactoryInitialization Pre Spring5源码 - 06 Spring Bean 生命周期流程 概述 01 接上文 通俗流程 下 ...

  7. Spring Bean默认配置为单实例 Spring Bean生命周期

    2019独角兽企业重金招聘Python工程师标准>>> Spring 的Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" ...

  8. spring bean生命周期_Spring中bean的生命周期和扩展点有哪些?

    前言 今天和大家分享一下Spring中Bean的生命周期的一些知识.先来说一下什么是生命周期吧,生命周期从其语义上理解就是一个对象从产生到销毁的整个过程,之所以把这个过程称为生命周期是因为其就像一个生 ...

  9. Spring Bean生命周期过程

    Spring Bean生命周期过程 Spring Bean生命周期指的是Bean加载Spring容器的过程,单例的Bean与多例的Bean加载过程是不一样的.这里指的是单例Bean的加载过程. 图:S ...

最新文章

  1. 认识一下Global.asa 文件
  2. 大型电商项目3.0实战+支付宝、微信支付项目实战
  3. 安全多方计算新突破!阿里首次实现“公开可验证” 的安全方案
  4. 【java8新特性】——lambda表达式与函数式接口详解(一)
  5. 百度搜索大批前高管加盟字节跳动;Kali Linux 2020.3发布| 极客头条
  6. php在浏览器输入路径,关于在sublime text 3 中配置一键浏览器打开php文件,并且是在localhost 本地服务器路径下...
  7. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
  8. Zookeeper - zookeeper安装与配置
  9. 个人Web自动化测试学习点总结
  10. NetworkManager 替代工具 wicd
  11. 162-SOP8液晶手写板专用IC
  12. PHP获取服务器图片并添加水印
  13. OpenTracing 详解
  14. H5: 关于底部导航使用“fixed”会遮住网页最下面内容的解决办法!
  15. PLC模拟量数据的处理
  16. python爬取《你好, 李焕英》豆瓣评论数据
  17. Ubuntu 22.04正式发布, 更像苹果了
  18. 选择结构程序设计 思维导图
  19. C++羽毛球馆场地预定系统
  20. Excel记录指定文件夹下的所有文件名;批量解压压缩包,处理压缩包套压缩包问题;

热门文章

  1. 如何判断一个项目的可行性?
  2. 微信订阅号获取openid,然后获取用户信息
  3. HTMLlesson1.1
  4. Docker 安装 Nginx 容器 (完整详细版)
  5. 全极化雷达遥感图像的迭代优化非局部均值去噪法
  6. Elasticsearch7.x指定JDK及安装时报错
  7. 我们该如何进行bug总结?
  8. Python爬虫学习手册
  9. 有赞商城如何对接ERP、CRM系统?
  10. ScrollView中嵌套GridView,不在顶部解决办法