一文搞懂Spring中Bean的生命周期
目录
- 一、使用配置生命周期的方法
- 二、生命周期控制——接口控制(了解)
- 小结
bean声明周期:bean从创建到销毁的整体过程
bean声明周期控制:在bean创建后到销毁前做一些事情
一、使用配置生命周期的方法 在BookDaoImpl中实现类中创建相应的方法:
//表示bean初始化对应的操作public void init(){System.out.println("init..."); }//表示bean销毁前对应的操作public void destory(){System.out.println("destory..."); }
applicationContext.xml配置初始化声明周期回调函数及销毁声明周期回调函数
执行结果:
文章图片
虚拟机退出,没有给bean销毁的机会。
可利用ClassPathXmlApplictionContext里的close方法主动关闭容器,就会执行销毁方法。
import com.itheima.dao.BookDao; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForLifeCycle {public static void main( String[] args ) {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); BookDao bookDao = (BookDao) ctx.getBean("bookDao"); bookDao.save(); //关闭容器ctx.close(); }}
执行结果:
文章图片
不过这种方式比较暴力,容器还提供另外的方法
在AppForLifeCycle中用关闭钩子函数
//注册关闭钩子函数,在虚拟机退出之前回调此函数,关闭容器ctx.registerShutdownHook();
执行结果:
文章图片
关闭钩子在任何时间都可以执行,close关闭比较暴力。
二、生命周期控制——接口控制(了解) applicationContext.xml配置:
BookServiceImpl:
可以利用接口InitializingBean和DisposableBean来设置初始化和销毁后的方法设置
import com.itheima.dao.BookDao; import com.itheima.service.BookService; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {private BookDao bookDao; public void setBookDao(BookDao bookDao) {System.out.println("set ....."); this.bookDao = bookDao; } public void save() {System.out.println("book service save ..."); bookDao.save(); } public void destroy() throws Exception {System.out.println("service destroy"); } public void afterPropertiesSet() throws Exception {System.out.println("service init"); }}
执行结果:
文章图片
可以看出set在执行在init的执行之后,当你的属性设置完以后,才去执行afterPropertiesSet,所有才叫afterPropertiesSet,在属性设置之后。
小结 生命周期总结
初始化容器
- 1、创建对象
- 2、执行构造方法
- 3、执行属性注入(set操作)
- 4、执行bean初始化方法
执行业务操作
【一文搞懂Spring中Bean的生命周期】关闭/销毁容器
执行bean操作
1、bean生命周期控制
配置
init-method接口(了解)
destroy-method
InitializingBean2、关闭容器
DisposableBean
ConfigurableApplicationContext
close()到此这篇关于一文搞懂Spring中Bean的生命周期的文章就介绍到这了,更多相关Spring Bean生命周期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
registerShutdownHook()
推荐阅读
- springboot|SpringBoot集成JWT实现token验证
- 全文检索|springboot整合
- spring4.1.8扩展实战之六(注册bean到spring容器(BeanDefinitionRegistryPostProcessor接口))
- springboot导出MYSQL数据库文档 screw集成
- 记一次线上SpringCloud|记一次线上SpringCloud Feign请求服务超时异常排查问题
- SpringBoot2.x整合Prometheus+Grafana附源码
- python|「软件测试4」一文详解四大典型的白盒测试方法
- Java|Spring Cloud微服务分布式架构之组件和概念介绍
- Java微服务与分布式的书,微服务分布式架构基础与实战(基于Spring Boot+Spring Cloud...)
- java|《深入理解Spring Cloud与微服务构建》第1章 微服务简介