ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对象的生命周期

2020-08-17 22:01:21  阅读:237  来源: 互联网

标签:Product 生命周期 对象 Spring Bean operation 方法 public


对象的生命周期

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

阶段

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

标签:Product,生命周期,对象,Spring,Bean,operation,方法,public
来源: https://www.cnblogs.com/llh4cnblogs/p/13520371.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有