生命周期
从对象的创建到对象的销毁的过程成为生命周期
Bean的生命周期
(1)通过构造器创建Bean实例(通过无参构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)调用bean的初始化方法(需要进行配置初始化的方法)
(4)bean可以使用(对象获取到了)
(5)当容器关闭时调用bean的销毁方法(需要进行配置销毁的方法)
演示Bean的生命周期
public class BeanLife {
private String bname;
public BeanLife() {
System.out.println("第一步:执行无参构造创建bean实例");
}
public void setBname(String bname) {
this.bname = bname;
System.out.println("第二步:调用set方法注入属性值");
}
//创建执行的初始化方法,需要在配置文件中设置init-method属性
public void initialize(){
System.out.println("第三步:调用初始化方法");
}
//创建执行的销毁方法,需要在配置文件中设置destroy-method属性,需要手动调用销毁方法
public void destroy(){
System.out.println("第五步:调用销毁方法");
}
}
spring配置文件
<bean id="beanLife" class="com.feng.bean.BeanLife" init-method="initialize" destroy-method="destroy">
<property name="bname" value="测试"></property>
</bean>
测试类
@Test
public void test4(){
/*ApplicationContext context =
new ClassPathXmlApplicationContext("beanLife.xml");*/
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("beanLife.xml");
System.out.println("第四步:获取bean实例可以调用了");
BeanLife beanLife = context.getBean("beanLife", BeanLife.class);
System.out.println(beanLife);
//手动让Bean实例销毁
context.close();//是ClassPathXmlApplicationContext里面的方法
}
运行结果:
第一步:执行无参构造创建bean实例
第二步:调用set方法注入属性值
第三步:调用初始化方法
第四步:获取bean实例可以调用了
com.feng.bean.BeanLife@2e3fc542
第五步:调用销毁方法
Bean的后置处理器
加上后置处理器后,会在第三步之前和之后各执行一个方法
(1)通过构造器创建Bean实例(通过无参构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)* 把bean实例传递bean后置处理器的方法*:执行postProcessBeforeInitialization方法
(4)调用bean的初始化方法(需要进行配置初始化的方法)
(5)把bean实例传递bean后置处理器的方法:执行postProcessAfterInitialization方法
(6)bean可以使用(对象获取到了)
(7)当容器关闭时调用bean的销毁方法(需要进行配置销毁的方法)
演示:
创建MyBeanPost类,实现BenaPostMyProcessor接口,创建后置处理器
public class MyBeanPost implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化方法执行前执行的方法");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化方法执行后执行的方法");
return bean;
}
}
<!--配置后置处理器-->
<bean id="myBeanPost" class="com.feng.bean.MyBeanPost"></bean>
运行结果:
第一步:执行无参构造创建bean实例
第二步:调用set方法注入属性值
在初始化方法执行前执行的方法
第三步:调用初始化方法
在初始化方法执行后执行的方法
第四步:获取bean实例可以调用了
com.feng.bean.BeanLife@10dba097
第五步:调用销毁方法