从对象创建到对象销毁的过程。Spring的IOC容器可以管理bean的生命周期,其允许在bean的生命周期的特定时间点执行相应的任务。
创建的bean对象
public class test {
private String name;
public test() {
System.out.println("第一步 创建bean");
}
public void setName(String name) {
this.name = name;
System.out.println("第二步 设置属性值");
}
public void myInit() {
System.out.println("第三步 bean被初始化");
}
public void myDestory() {
System.out.println("第五步 bean被销毁");
}
public String getName() {
return name;
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="test" class="cn.itcast.travel.domain.test" init-method="myInit" destroy-method="myDestory">
<property name="name" value="张三"></property>
</bean>
</beans>
运行
@Test
public void test(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
test test = context.getBean("test", test.class);
System.out.println("第四步 使用bean " +test.getName());
context.close();
}
// 上述代码运行结果
第一步 创建bean
第二步 设置属性值
第三步 bean被初始化
第四步 使用bean张三
第五步 bean被销毁
注意:单例bean和多实例的bean的创建时间是不同的,那么他们的初始方法和销毁方法的执行时间也稍微不同
单例bean的生命周期
多例bean的生命周期
bean的后置处理器允许在初始化方法执行前后对bean做额外的操作,bean的后置处理器对IOC容器中的所有bean实例逐一处理,而非单一处理。其典型应用是:检查bean属性的正确性或根据特定的标准更改bean的属性。
a. 通过构造函数或工厂方法创建bean实例
b. 为bean的属性设置值和对其它bean的引用
c. 将bean实例传递给bean后置处理器的postProcessBeforeInitialization方法
d. 调用bean的初始化方法
e. 将bean实例传递给bean后置处理器的 postProcessAfterInitialization方法
f. bean可以使用了
g. 当容器关闭时调用bean的销毁方法
首先我们需要实现
org.springframework.beans.factory.config.BeanPostProcessor
接口并实现里面的两个方法。如下
public class beanPostProcessor implements BeanPostProcessor {
/**
* 初始化方法执行前 执行
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean的后置处理器 初始化方法执行前---");
return null;
}
/**
* 初始化方法执行后 执行
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean的后置处理器 初始化方法执行后---");
return null;
}
}
注册bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="test" class="cn.itcast.travel.domain.test" init-method="myInit" destroy-method="myDestory">
<property name="name" value="张三"></property>
</bean>
// bean的后置处理器
<bean id="beanPostProcessor" class="cn.itcast.travel.domain.test1"></bean>
</beans>
运行,从结果我们可以看出bean生命周期的过程
@Test
public void test(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
test test = context.getBean("test", test.class);
System.out.println("第四步 使用bean " +test.getName());
context.close();
}
// 以下是执行结果
第一步 创建bean
第二步 设置属性值
bean的后置处理器 初始化方法执行前---
第三步 bean被初始化
bean的后置处理器houzhichui 初始化方法执行后---
第四步 使用bean 张三
第五步 bean被销毁