一:相关重要概念
-
生命周期:从创建到消亡的完整过程
-
bean生命周期:bean从创建到销毁的整体过程
-
bean生命周期控制:在bean创建后到销毁前做一些事情
二:Bean的生命周期
三:Bean销毁时机
- 容器关闭前触发bean的销毁
- 关闭容器方式:
1.手工关闭容器 --较为暴力,不推荐使用
(调用ConfigurableApplicationContext接口的实现类ClassPathXmlApplication的close方法)
2.注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机
(调用ConfigurableApplicationContext接口的实现类ClassPathXmlApplication的 registerShutdownHook方法)
四:Bean生命周期控制方法一
(类中提供初始化方法和销毁方法bean标签属性上配置初始化方法和销毁方法的属性)
1.提供生命周期控制方法
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
//表示bean初始化对应的操作
public void init(){
System.out.println("init...");
}
//表示bean销毁前对应的操作
public void destory(){
System.out.println("destory...");
}
}
2.applicationContext.xml配置初始化方法和销毁方法的属性
<!--init-method:设置bean初始化生命周期回调函数,此处填写init方法名-->
<!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象,此处填写destory方法名-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
public class AppForLifeCycle {
public static void main( String[] args ) {
//此处需要使用实现类类型,接口类型没有close方法
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
//关闭容器,执行销毁的方法
ctx.close();
}
}
五:Bean生命周期控制方法二
(类中实现InitializingBean, DisposableBean接口)
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 afterPropertiesSet() throws Exception {
System.out.println("service init");
}
public void destroy() throws Exception {
System.out.println("service destroy");
}
}
其他类的代码和Bean生命周期控制方法一代码一样就不再附图了