Bean的生命周期

通过spring工厂,可以控制bean的生命周期。

通过 init-method属性 指定初始化后的调用方法

通过 destroy-method属性 指定销毁对象前的方法

在xml配置Bean的初始化和销毁方法

//生命周期测试
public class LifeCycleBean {
	public LifeCycleBean() {
		System. out. println("LifeCycleBean构造方法" )
	}
	public void init(){
		System . out . print1n("LifeCycleBean初始化");
	}
	public void distroy(){
		System. out .println("LifeCycleBean销毁");
	}
}
<!-- bean的生命周期-->
<bean id= "lifecycle" class= "cn. yanqi. lifecycle. Lifecycle" init -method= "init" destroy -method= "dos tory "></bean>

测试:

public void testInitDestroy() throws Exception{
//1.获取工厂
	ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext . xml");
//2.得到对象
	LifeCycleBean lifeCycleBean = (LifeCycleBean) applicationContext . getBean("lifeCycleBean");
	System. out. println(lifeCycleBean);
}

测试查看控制台打印,发现销毁方法没有执行。

原因:销毁方法的执行必须满足两个条件:

  1. 单例(singleton)的bean才可以手动销毁。
  2. 必须手动关闭容器(close)时,才会执行手动销毁的方法。

单例是由容器创建的,那销毁也是由容器销毁的
销毁命令测试:

@Test
public void test(){
	//先得到spring容器
	ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext . xm1");
	//从容器获取bean对象
	LifeCycleBean lifeCycleBean= (LifeCycleBean) applicationContext . getBean("lifeCycleBean");
	//使用junit调试的时候,当调试完成,junit强行关闭jvm,但此时spring容器还没来得及关闭,所以,不会出现销毁方法。
	//要想看销毁bean的方法执行,必须手动关闭spring容器。
	((ClassPathXmlApplicationContext)applicationContext).close();
	//单例是由容器初始化时创建和容器关闭销毁的,但多例不是由容器创建时创建,容器关闭时也不会销毁多例。
}

多例没就destroy-method 方法,只对单例有作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值