Spring生命周期详解 + 应用实例

Spring Bean的生命周期

在这里插入图片描述

创建阶段

  • 调用构造方法
  • 如果bean是单例的,并且没有开启懒加载,那么Spring工厂创建的时候就会创建该对象。
    如果bean是单例的,但是开启了懒加载,在对象第一次使用的时候创建该对象。
    如果bean不是单例的,在使用该对象的时候创建。

初始化阶段

  • Spring工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化开发。
  • 初始化方法提供:程序员提供
  • 初始化方法调用:Spring工厂进行调用。

提供初始化的方法:

  • 实现InitializingBean接口:
    public void afterProperitesSet() //在此方法中做初始化操作

  • 对象中提供一个普通的方法

    public void myInit(){
        //Spring 怎么知道要调用呢?? init-method="" 配置
        
    }
    
  • 注解 @PostConstruct

几种方法的优先级:

//如果三种初始化方法都提供了
@PostConstruct ---> InitializingBean ----> init-method

注入与初始化的顺序:

注入一定发生在初始化的前面。

Spring创建对象(调构造方法) —> DI —> 初始化

销毁阶段

Spring销毁对象前,会调用对象的销毁方法,完成销毁操作。

  1. Spring什么时候销毁所创建的对象

    ctx.close(); //工厂关闭的时候

  2. 销毁方法是程序员定义的

    调用:Spring调用

  3. 如何定义销毁方法:

    • 实现DisPosableBean接口

      public void destroy(){
          //完成销毁操作(资源释放)
      }
      
    • 普通的销毁方法

      public void myDestroy() throw Exption{
          //需要配置 destroyMethod="myDestroy"
      }
      
    • @preDestroy

    几种方法的优先级:

    @preDestroy > DisposableBean > destoryMethod

注意:销毁操作只适用于singleton


应用实例

前言:有些时候我们需要在创建对象的时候做一些操作,这时候我们可能会选择在构造方法里进行,但是如果构造方法里需要用到成员变量,而成员变量恰好是配置文件通过@Value注入进来的。这时候因为Spring调用构造方法创建对象的时候成员变量的值还未注入,就会事与愿违。

例如我们在使用Client模拟客户端的时候,会有需要账号密码建立链接的情况。

public TestConnect(){
        //获取连接信息
        this.client = Client.create();
        this.client.addFilter(new HTTPBasicAuthFilter(this.UserName, this.Password));
    }

这种写法如果被Spring工厂管理,他的成员变量是不能从配置文件中获取到的。(因为Spring创建一个对象是先调用构造方法再注入)

分析发现建立链接的需求,在初始化也可以完成,并且可以获取到配置文件中的值。

@PostConstruct
    public void myInit(){
        //获取连接信息
        this.client = Client.create();
        this.client.addFilter(new HTTPBasicAuthFilter(this.UserName, this.Password));
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结构化思维wz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值