实验十六 bean的生命周期
1、bean的生命周期清单
- 在传统Java应用中,bean生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了。一旦bean不再被使用,则由Java自动进行垃圾回收。
- 相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程。
其中红框标记四个阶段的是基本阶段。
蓝色标记的是针对所有Bean的扩展阶段,需定义BeanPostProcessor实现类并配置。
未进行标记的是只针对当前Bean的阶段,需要当前Bean实现相应的接口。
从上图可以看出,Bean生命周期的主要阶段包括:
- bean对象创建(调用无参构造器)
- 给bean对象设置属性
- bean对象初始化之前操作(由bean的后置处理器负责)
- bean对象初始化(需在配置bean时指定初始化方法)
- bean对象初始化之后操作(由bean的后置处理器负责)
- bean对象就绪可以使用
- bean对象销毁(需在配置bean时指定销毁方法)
- IOC容器关闭
2、指定bean的初始化方法和销毁方法
①创建两个方法作为初始化和销毁方法
用com.atguigu.ioc.component.HappyComponent类测试:
public void happyInitMethod() {
System.out.println(“HappyComponent初始化”);
}
public void happyDestroyMethod() {
System.out.println(“HappyComponent销毁”);
}
②配置bean时指定初始化和销毁方法
init-method=”happyInitMethod”
destroy-method=”happyDestroyMethod”
>
3、bean的后置处理器
①创建后置处理器类
package com.atguigu.ioc.process;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
// 声明一个自定义的bean后置处理器
// 注意:bean后置处理器不是单独针对某一个bean生效,而是针对IOC容器中所有bean都会执行
public class MyHappyBeanProcessor implements BeanPostProcessor {
@Override<br /> public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("☆☆☆" + beanName + " = " + bean);
return bean;<br /> }
@Override<br /> public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("★★★" + beanName + " = " + bean);
return bean;<br /> }<br />}
②把bean的后置处理器放入IOC容器
③执行效果示例
HappyComponent创建对象 HappyComponent要设置属性了 ☆☆☆happyComponent = com.atguigu.ioc.component.HappyComponent@ca263c2 HappyComponent初始化 ★★★happyComponent = com.atguigu.ioc.component.HappyComponent@ca263c2 HappyComponent销毁