Spring 学习笔记(五)- bean 的生命周期

默认情况下,Spring在读取xml文件的时候,就会创建对象。在创建对象的过程是:先调用构造器,然后有属性值调用set方法设置属性,然后调用init-method属性值中所指定的初始化方法。对象在被销毁的时候,会调用destroy-method属性值中所指定的销毁方法,写一个测试类,代码如下:

测试 bean
public class LifeBean {
	private String name;
	
	public LifeBean() {
		System.out.println("LifeBean 的无参构造函数");
	}
	
	public void setName(String name) {
		System.out.println("setName 方法");
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void init() {
		System.out.println("This is init of lifeBean");
	}
	
	public void destory() {
		System.out.println("This is destory of lifeBean");
	}
}
applicationContext.xml
<bean id="lifeBean" class="www.xq.spring.bean.LifeBean" 
            init-method="init" destroy-method="destory">
		<property name="name" value="lifeBean"></property>
</bean>
测试
@Test
	public void testLifeBean() {
		AbstractApplicationContext ctx = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		LifeBean lifeBean = (LifeBean) ctx.getBean("lifeBean");
		System.out.println(lifeBean);
		
		//销毁 bean
		ctx.close();
	}
运行结果:
LifeBean 的无参构造函数
setName 方法
This is init of lifeBean
www.xq.spring.bean.LifeBean@42f93a98
This is destory of lifeBean

测试中,我们可以看spring中的bean的简单生命周期,实际上它的完整生命周期要复杂一些:

image
image

我们这里对BeanPostProcessor接口,做一个实现类,演示一下这些接口如果要在项目中自定义的话应该怎么用,生命周期的前后置处理方法的执行情况:

public class MyBeanPostProcessor implements BeanPostProcessor{
	
	/**
	 * 在初始化方法之前调用,前置处理
	 * bean:第一步实例化的 bean 本身
	 * beanName:bean 在配置文件中的 id,也是 bean 在 IOC 容器中的名字
	 * return:需要返回前面的 bean,但是我们可以在返回之前,偷梁换柱,
	 * 又点像 javaweb 中的拦截器的作用
	 */
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("前置处理的 beanName" + beanName);
		return bean;
	}
	
	/**
	 * 在初始方法之后调用,后置处理
	 */
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("前置处理的 beanName" + beanName);
		return bean;
	}
}
applicationContext.xml
<!-- 配置 BeanPostProcessor 的实现类,不用 id,Spring 容器会自动识别 -->
	<bean class="www.xq.spring.bean.MyBeanPostProcessor"></bean>
运行结果:

image

以上就是 Bean 在 Spring 容器中从创建到销毁的整个生命周期!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值