[[toc]]

实验十六 bean的生命周期

1、bean的生命周期清单


  • 在传统Java应用中,bean生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了。一旦bean不再被使用,则由Java自动进行垃圾回收。
  • 相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程。
  • 实验16 bean的生命周期 - 图1


其中红框标记四个阶段的是基本阶段。
蓝色标记的是针对所有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时指定初始化和销毁方法




class=”com.atguigu.ioc.component.HappyComponent”
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 {

  1. @Override<br /> public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  2. System.out.println("☆☆☆" + beanName + " = " + bean);
  3. return bean;<br /> }
  4. @Override<br /> public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  5. System.out.println("★★★" + beanName + " = " + bean);
  6. return bean;<br /> }<br />}

②把bean的后置处理器放入IOC容器


③执行效果示例

HappyComponent创建对象 HappyComponent要设置属性了 ☆☆☆happyComponent = com.atguigu.ioc.component.HappyComponent@ca263c2 HappyComponent初始化 ★★★happyComponent = com.atguigu.ioc.component.HappyComponent@ca263c2 HappyComponent销毁

上一个实验 回目录