前言:生命周期是指从对象创建到对象销毁的过程
1.bean的生命周期
- 通过构造器创建 bean 实例(无参数构造)
- 为 bean 的属性设置值和对其他 bean的引用(调用 set 方法)
- 调用 bean 的初始化的方法(需要进行配置初始化的方法)
- bean 可以使用了(对象获取到了)
- 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
代码实例:
public class LifeCycleDemo {
private String name;
//无参数构造
public LifeCycleDemo() {
System.out.println("1. 执行无参数构造器创建bean实例");
}
// set 方法
public void setName(String name) {
this.name = name;
System.out.println("2. 调用set方法设置属性值");
}
//创建执行的初始化的方法
public void initMethod(){
System.out.println("3. 执行初始化的方法");
}
//创建执行的销毁的方法
public void destroyMethod(){
System.out.println("5. 执行销毁的方法");
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("iocbean/byxml/lifecycle/bean.xml");
LifeCycleDemo lifeCycleDemo = context.getBean("lifeCycleDemo", LifeCycleDemo.class);
System.out.println("4. 使用bean实例对象");
System.out.println(lifeCycleDemo);
//手动让bean实例销毁
((ClassPathXmlApplicationContext) context).close();
}
}
<?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="lifeCycleDemo" class="iocbean.byxml.lifecycle.LifeCycleDemo" init-method="initMethod" destroy-method="destroyMethod" >
<property name="name" value="小明"></property>
</bean>
</beans>
输出结果:
1. 执行无参数构造器创建bean实例
2. 调用set方法设置属性值
3. 执行初始化的方法
4. 使用bean实例对象
iocbean.byxml.lifecycle.LifeCycleDemo@15761df8
5. 执行销毁的方法
Process finished with exit code 0
2.bean 的后置处理器,bean 生命周期有七步
2.bean 的后置处理器,bean 生命周期有七步
通过构造器创建 bean 实例(无参数构造)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization调用 bean 的初始化的方法(需要进行配置初始化的方法)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitializationbean 可以使用了(对象获取到了)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
添加后置处理器后代码示例:
在上述代码基础上再创建一个类,实现接口 BeanPostProcessor,创建后置处理器
public class MyBeanPostProcessor implements BeanPostProcessor {
//在初始化之前执行的方法
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("3之前. 在初始化之前执行的方法");
return bean;
}
//在初始化之后执行的方法
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("3之后. 在初始化之后执行的方法");
return bean;
}
}
<!--配置后置处理器-->
<bean id="myBeanPostProcessor" class="iocbean.byxml.lifecycle.MyBeanPostProcessor"></bean>
输出结果:
1. 执行无参数构造器创建bean实例 2. 调用set方法设置属性值 3之前. 在初始化之前执行的方法 3. 执行初始化的方法 3之后. 在初始化之后执行的方法 4. 使用bean实例对象 iocbean.byxml.lifecycle.LifeCycleDemo@5e4c8041 5. 执行销毁的方法 Process finished with exit code 0