文章目录

  • 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销毁对象前,会调用对象的销毁方法,完成销毁操作。

  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创建一个对象是先调用构造方法再注入)

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

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

Spring生命周期详解 + 应用实例相关推荐

  1. Spring 生命周期详解

    Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...

  2. Spring生命周期详解

    导读 Spring中Bean的生命周期从容器的启动到停止,涉及到的源码主要是在org.springframework.context.support.AbstractApplicationContex ...

  3. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  4. vue 声明周期函数_Vue 生命周期详解

    Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...

  5. Cocos Creator 预制体(Prefab) - 生命周期详解

    说明 本文章适用于2.4.x版本的介绍,另外部分逻辑例如start或者enable的调用关系在编辑器或者其他运行环境下可能存在差异,建议大家自行去看源码! 创建 可通过拖拉场景内节点到文件目录上生成一 ...

  6. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  7. Fragment的懒加载与生命周期详解

    提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...

  8. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  9. taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...

最新文章

  1. Opencv 基础 MatOfByte创建和byte数组
  2. highcharts一天时间 与一周时间_一天当中什么时间减肥降重最好的
  3. b树索引 java_B树索引最通俗易懂的介绍
  4. 一周内被程序员疯转 2.4 W次,最终被大厂封杀!
  5. 洛谷试炼场 计数问题
  6. 关于md导入时本地图片外链失败的解决方法
  7. 关于王小云破解MD5
  8. 操作日志 | 上证50是续命仙丹还是饮鸩毒药?
  9. 在游戏中,爆出神装是真随机还是假随机?
  10. w10计算机发送到桌面,​win10系统右击软件没有发送到桌面快捷方式怎么办
  11. 2022百万奖金投委团 |香港科大-杰瑞集团 2022【人工智能】百万奖金国际创业大赛...
  12. STEINS;GATE ELITE(中文名《命运石之门:精英》)游戏通关流程
  13. AI画作拿下比赛一等奖惹怒人类艺术家,主办方:照常颁奖
  14. css 动画时钟 时分秒
  15. linux执行驱动文件命令,linux怎么安装驱动?
  16. 【历史上的今天】2 月 24 日:乔布斯生日;苹果推出 Thunderbolt 接口;WhatsApp 创始人诞生
  17. 安装和配置java环境
  18. Spotify登陆韩国
  19. [普通物理]波的能量与干涉
  20. GMap.net地图下载器

热门文章

  1. 小心,你的充电宝可能被黑了!能烧毁元件,入侵手机程序
  2. 微信小程序自制轮播图(仿京粉轮播)
  3. 仿淘宝固定右侧侧边栏 发现一个和教学视频不一样的地方
  4. php中fopen函数,PHP的fopen()打开文件的函数
  5. 系统学习大模型的20篇论文
  6. 教你如何查看一款App里面所包含的图片
  7. Python开发实战案例之网络爬虫(附源码)-张子良-专题视频课程
  8. 计算机电路与电子学试卷,华北科技学院电路与电子学试卷.doc
  9. DAM2+加密狗克隆方法
  10. 草根站长如何赚到人生第一个100万