对象的生命周期

对象的生命周期

指的是对象的创建、存活、消亡的过程。

阶段

Spring工厂为我们提供了对象生命周期中的三个阶段可供定制化操作。
日常开发中,这个用得还是很少的。了解下。

创建阶段

单例对象会在Spring工厂创建时进行创建;非单例对象则是在调用时进行创建。单例对象使用懒加载配置也可以实现在调用时创建的效果。

初始化阶段

Spring工厂在创建完对象后,调用对象的初始化方法完成对应的初始化操作。(在构造方法之后执行
1.可实现InitializingBean接口。

    public class Product implements InitializingBean {
    public Product() {
        System.out.println("Product.Product");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }
   }
  1. 使用普通方法来初始化。只能是公开无返回值的方法。此时则需要在配置中指定这个方法名。如
    public class Product implements InitializingBean {
    public Product() {
        System.out.println("Product.Product");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }

    public void myInit() {
        System.out.println("Product.myInit");
    }
}
// beans.xml
<bean id="product" class="com.llh.studyspring.beans.life.Product" init-method="myInit"/>

豆知识

同时使用上面两种方法时,会先执行InitializingBean接口下的方法,再执行手动指定的方法。

注入在初始化方法之前

销毁阶段

销毁对象之前调用的方法。Spring工厂关闭时才会进行销毁。

与初始化相似,可实现DisposableBean接口或是指定特定的方法。

销毁方法只适用于指定为单例的Bean。

Bean的后置处理

使用BeanPostProcessor接口可以对Bean的初始化做进一步的处理。

postProcessBeforeInitialization方法在Bean的构造方法和DI之后,postProcessAfterInitialization则是在指定的init-method方法之后(如果有的话)。两个方法都会把处理过后的Bean实例返回给Spring,这就是AOP可以直接获取代理对象的机制。

小结

Bean的生命周期简单示意图:

st=>start: Spring 工厂
op=>operation: 调用构造方法
op2=>operation: 进行DI
op3=>operation: 执行InitializingBean中的方法
op4=>operation: 执行init-method指定的方法
op5=>operation: 执行DisposableBean中的方法
op6=>operation: 执行destroy-method指定的方法

op7=>operation: 执行BeanPostProcessor@postProcessBeforeInitialization方法
op8=>operation: 执行BeanPostProcessor@postProcessAfterInitialization方法
e=>end
st->op->op2->op7->op3->op4->op8->op5->op6->e

上一篇:JAVA设计模式之装饰者模式


下一篇:Unity 异步加载场景