Spring生命周期详解 + 应用实例
Posted 结构化思维wz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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销毁对象前,会调用对象的销毁方法,完成销毁操作。
-
Spring什么时候销毁所创建的对象
ctx.close(); //工厂关闭的时候
-
销毁方法是程序员定义的
调用:Spring调用
-
如何定义销毁方法:
-
实现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));
以上是关于Spring生命周期详解 + 应用实例的主要内容,如果未能解决你的问题,请参考以下文章