高级java开发必须掌握的Spring接口——SmartLifecycle
有些场景我们需要在Spring 所有的bean 完成初始化后紧接着执行一些任务或者启动需要的异步服务。常见有几种解决方案
j2ee 注解 启动前@PostConstruct 销毁前@PreDestroy 基于j2ee 规范
springboot 的 org.springframework.boot.CommandLineRunner springboot 特性前面我已经介绍过了
spring org.springframework.context.SmartLifecycle
这里介绍一下第三种 SmartLifecycle
SmartLifecycle 不仅仅能在初始化后执行一个逻辑,还能再关闭前执行一个逻辑,比如你一个服务在启动时向服务注册发现中心发一个信号告诉它服务上线了,下线前通知它你下线了。也就是实现了一个 从生到死 的轮回。
话不多说先实现一个SmartLifeCycle
我们发现实现类需要实现3个方法,但是这3个方法并不是SmartLifecycle的方法而是
org.springframework.context.Lifecycle
的方法:
void start() 我们主要在该方法中启动任务或者其他异步服务,比如开启MQ接收消息当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,默认生命周期 处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值。如果为“true”,则该方法会被调用,而不是等待显式调用自己的start()方法,同时当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,默认生命周期处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值, 如果为true,则该方法会被调用,而不是等待显式调用自己的start()方法,boolean isRunning() 的状态信号也决定此方法是否执行只有当该方法返回false start()方法才会被执行,有兴趣可以看LifecycleProcessor相关实现
void stop() 顾名思义 生命周期结束时调用的方法。只有当 boolean isRunning() 方法返回true 该方法才会被执行,该方法是属于Lifecyle接口的,被SmartLifeCycle作为了一个钩子。 实际执行的是SmartLifeCycle中的这个方法
boolean isRunning() 作为 信号来判定 start 还是stop
我们来启动一下springboot应用测试一下,下图说明 start在应用启动前执行了
然后我们写一个springmvc 接口来关闭应用,下面的关闭方法写的比较粗糙,当然有更高级的玩法。
我们调用 /life/destroy 方法 ,会出现下面的结果
这里介绍它的一些使用方法和场景,先学会使用,更深层次的留给你自己去挖掘。
- Java开发必须掌握的 20+ 种 Spring 常用注解(建议收藏)
- 为什么说 Java 程序员腾讯分分彩玩法彩种定制开发到了必须掌握 Spring Boot 的时候?
- Java开发必须掌握的20+种 Spring常用注解
- Java开发必须掌握的 20+ 种 Spring 常用注解
- 作为一个Java开发人员,有些常用的Linux命令必须掌握
- java SpringMVC mybatis 后台框架 集成代码生成器开发利器 全部源码_java微信接口开发
- 微信公众号开发---红包高级接口(java)
- java反射--高级开发必须懂的
- Java 必须掌握的 12 种 Spring 常用注解!
- JAVA开发必须掌握的21个核心技术
- 高级 Java 必须掌握:这17 个 JVM 参数
- 分享Java开发必须掌握的日志分析命令
- 如何用比较快速的方法掌握Spring的核心——依赖注入,Java web轻量级开发面试教程 读书笔记
- Java开发大型互联网-架构师必须掌握的分布式技术
- 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
- Javaweb开发必须掌握的数据库知识总结
- java程序员必须掌握的spring boot——你真的了解了吗
- Java程序员必须掌握的Spring依赖管理原理
- 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
- Java 必须掌握的 20+ 种 Spring 常用注解