这Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,
一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用
它有很大的帮助。

一、生命周期流程图:

  Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。

Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用它有很大的帮助。

下面以BeanFactory为例,说明一个Bean的生命周期活动:

Bean的建立

由BeanFactory读取Bean定义文件,并生成各个实例。

Setter注入

执行Bean的属性依赖注入。

BeanNameAware的setBeanName()

如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。

BeanFactoryAware的setBeanFactory()

如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。

BeanPostProcessors的processBeforeInitialization()

容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。

InitializingBean的afterPropertiesSet()

如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。

Bean定义文件中定义init-method

在Bean定义文件中使用“init-method”属性设定方法名称,如下:

<bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod">
  .......
 </bean>

这时会执行initMethod()方法,注意,这个方法是不带参数的。

BeanPostProcessors的processAfterInitialization()

容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。

DisposableBean的destroy()

在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。

Bean定义文件中定义destroy-method

在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

<bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod">
  .......
</bean>

这时会执行destroyMethod()方法,注意,这个方法是不带参数的。

以上就是BeanFactory维护的一个Bean的生命周期。下面这个图可能更直观一些:

如果使用ApplicationContext来维护一个Bean的生命周期,则基本上与上边的流程相同,只不过在执行BeanNameAware的setBeanName()后,若有Bean类实现了org.springframework.context.ApplicationContextAware接口,则执行其setApplicationContext()方法,然后再进行BeanPostProcessors的processBeforeInitialization()

实际上,ApplicationContext除了向BeanFactory那样维护容器外,还提供了更加丰富的框架功能,如Bean的消息,事件处理机制等。

 

转载于:https://www.cnblogs.com/Smile-123/p/5993348.html

Spring ----Bean的生命周期相关推荐

  1. Spring bean 实现生命周期的三种解决方案

    Spring bean 实现生命周期的三种解决方案 参考文章: (1)Spring bean 实现生命周期的三种解决方案 (2)https://www.cnblogs.com/javawebsoa/a ...

  2. 字节跳动面试题:“请你描述下 Spring Bean 的生命周期?”

    1. 引言 "请你描述下 Spring Bean 的生命周期?",这是面试官考察 Spring 的常用问题,可见是 Spring 中很重要的知识点. 我之前在准备面试时,去网上搜过 ...

  3. 带你读懂Spring Bean 的生命周期,嘿,就是玩儿~

    带你读懂Spring Bean 的生命周期,嘿,就是玩儿~ 一.前言 今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象.因为 Spring Bean 的 ...

  4. 请解释Spring Bean 的生命周期?

    Spring Bean 的生命周期简单易懂.在一个bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态.同样的,当一个bean 不在被调用时需要进行相关的析构操作,并从bean 容器中 ...

  5. Spring Bean的生命周期及接口回调

    本篇介绍Spring框架为Spring Bean生命周期各阶段提供的回调接口,程序通过实现回调接口,可以在IOC容器实例化或销毁Bean的过程中,得到Bean的控制权,并对Bean进行预处理工作.通过 ...

  6. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  7. 再聊Spring Bean的生命周期

    Spring Bean的生命周期是Spring面试热点问题.这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Sp ...

  8. 【Spring Bean的生命周期】

    Spring Bean的生命周期(非常详细) - Chandler Qian - 博客园

  9. 简述 Spring Bean的生命周期

    "请你描述下 Spring Bean 的生命周期?",这是面试官考察 Spring 的常用问题,可见是 Spring 中很重要的知识点. 其实要记忆该过程,还是需要我们先去理解,本 ...

  10. Spring Bean的生命周期(二)

    上一篇文章大致说明了Spring Bean的生命周期,本章详细说明各个阶段调用的接口方法. 1.1 - 3.2 对应 实例化 Instantiation 4.1 - 4.2 对应 属性赋值 Popul ...

最新文章

  1. 使用Kubernetes和Docker进行简单的leader选举
  2. Special Judge Ⅲ(这道题考的就是出栈序列判定_关键代码不差什么)
  3. [译]星际争霸人工智能比赛——规则
  4. java:数字转string 报空指针_《java基础》我踩过三元运算符的坑
  5. 神奇!C语言还可以这样用来仿真
  6. 异步任务,邮箱任务,定时任务
  7. MySql学习之varchar类型
  8. c++指定枚举占一个字节
  9. c# list排序的三种实现方式
  10. javascript 技巧总结积累1-108条(正在积累中)
  11. opencv基本绘图函数--点,线,矩形,圆等
  12. Atitit 未来趋势把控的书籍 attilax总结 v3
  13. 韩顺平 零基础30天学会Java 学习笔记
  14. 税务计算机类考试题型,2020年税务师考试题型、计算器使用规定及考试难度
  15. 苹果丽黑字体下载 Hiragino Sans GB W3/W6 ttf格式
  16. java mina框架_Mina框架在项目中的使用(一)
  17. 大学计算机应用教程马秀麟,大学计算机基础电子教案.docx
  18. 教你用VC6写热血江湖小外挂
  19. 一个简单文本分类任务-EM算法-R语言
  20. html表ge模板_40多个漂亮的网页表单设计实例

热门文章

  1. ASP 三十条精华代码
  2. 【转载】从多项式曲线拟合到模式识别的相关概念
  3. UVA - 1252 Twenty Questions (状压dp+vis数组加速)
  4. Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换
  5. 【GoLang】转载:我为什么放弃Go语言,哈哈
  6. 软件工程的实践项目的自我目标
  7. Java String,StringBuilder和StringBuffer的区别 StringBuilder StringBuffer String
  8. 常见加密算法分类,用途,原理以及比较
  9. Linux中命令链接操作符的十个最佳实例
  10. 坚持完成这套学习手册,你就可以去 Google 面试了