从对象创建到对象销毁的过程。Spring的IOC容器可以管理bean的生命周期,其允许在bean的生命周期的特定时间点执行相应的任务。
bean的生命周期(不考虑bean的后置处理器)- 通过构造器或工厂方法创建bean实例
- 为bean的属性设置值和对其它bean引用
- 调用bean的初始化方法
- 使用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;
}
}
配置文件
运行
@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做额外的操作,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 {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean的后置处理器 初始化方法执行前---");
return null;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean的后置处理器 初始化方法执行后---");
return null;
}
}
注册bean
// bean的后置处理器
运行,从结果我们可以看出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被销毁
参考:详解Spring中Bean的作用域与生命周期



