这篇文章主要为大家介绍了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配置初始化声明周期回调函数及销毁声明周期回调函数
<!--init-method:设置bean初始化生命周期回调函数-->
<!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
执行结果:
虚拟机退出,没有给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配置:
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
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初始化方法
使用bean
执行业务操作
关闭/销毁容器
执行bean操作
1、bean生命周期控制
配置
init-method
destroy-method
接口(了解)
InitializingBean
DisposableBean
2、关闭容器
ConfigurableApplicationContext
close()
registerShutdownHook()
到此这篇关于一文搞懂Spring中Bean的生命周期的文章就介绍到这了,更多相关Spring Bean生命周期内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:一文搞懂Spring中Bean的生命周期


基础教程推荐
- Java File类的概述及常用方法使用详解 2023-05-18
- 一文了解Java 线程池的正确使用姿势 2023-06-17
- 用java实现扫雷游戏 2022-12-06
- Project Reactor源码解析publishOn使用示例 2023-04-12
- SpringBoot配置文件中密码属性加密的实现 2023-03-11
- 全局记录Feign的请求和响应日志方式 2023-01-09
- JVM分析之类加载机制详解 2023-04-06
- Java去掉小数点后面无效0的方案与建议 2023-02-18
- Java使用EasyExcel进行单元格合并的问题详解 2023-01-18
- 工厂方法在Spring框架中的运用 2023-06-23