Spring生命周期详解 + 应用实例
文章目录
- Spring Bean的生命周期
- 创建阶段
- 初始化阶段
- 销毁阶段
- 应用实例
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创建一个对象是先调用构造方法再注入)
分析发现建立链接的需求,在初始化也可以完成,并且可以获取到配置文件中的值。
@PostConstructpublic void myInit(){//获取连接信息this.client = Client.create();this.client.addFilter(new HTTPBasicAuthFilter(this.UserName, this.Password));}
Spring生命周期详解 + 应用实例相关推荐
- Spring 生命周期详解
Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...
- Spring生命周期详解
导读 Spring中Bean的生命周期从容器的启动到停止,涉及到的源码主要是在org.springframework.context.support.AbstractApplicationContex ...
- Fragment生命周期详解
关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...
- vue 声明周期函数_Vue 生命周期详解
Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...
- Cocos Creator 预制体(Prefab) - 生命周期详解
说明 本文章适用于2.4.x版本的介绍,另外部分逻辑例如start或者enable的调用关系在编辑器或者其他运行环境下可能存在差异,建议大家自行去看源码! 创建 可通过拖拉场景内节点到文件目录上生成一 ...
- Android面试之Activity生命周期详解
Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...
- Fragment的懒加载与生命周期详解
提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...
- 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记
01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...
- taro生命周期详解
taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...
最新文章
- Opencv 基础 MatOfByte创建和byte数组
- highcharts一天时间 与一周时间_一天当中什么时间减肥降重最好的
- b树索引 java_B树索引最通俗易懂的介绍
- 一周内被程序员疯转 2.4 W次,最终被大厂封杀!
- 洛谷试炼场 计数问题
- 关于md导入时本地图片外链失败的解决方法
- 关于王小云破解MD5
- 操作日志 | 上证50是续命仙丹还是饮鸩毒药?
- 在游戏中,爆出神装是真随机还是假随机?
- w10计算机发送到桌面,​win10系统右击软件没有发送到桌面快捷方式怎么办
- 2022百万奖金投委团 |香港科大-杰瑞集团 2022【人工智能】百万奖金国际创业大赛...
- STEINS;GATE ELITE(中文名《命运石之门:精英》)游戏通关流程
- AI画作拿下比赛一等奖惹怒人类艺术家,主办方:照常颁奖
- css 动画时钟 时分秒
- linux执行驱动文件命令,linux怎么安装驱动?
- 【历史上的今天】2 月 24 日:乔布斯生日;苹果推出 Thunderbolt 接口;WhatsApp 创始人诞生
- 安装和配置java环境
- Spotify登陆韩国
- [普通物理]波的能量与干涉
- GMap.net地图下载器