IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Bean 生命周期 -> 正文阅读

[Java知识库]Spring Bean 生命周期

目录

1.元信息配置阶段

2.元信息解析阶段(封装BeanDefinition)

3.Bean注册阶段

?4.实例化阶段

5.属性赋值阶段

6.初始化阶段

6.1 Aware接口回调阶段

6.2 实例化前置增强阶段

6.3 调用初始化

?6.4 实例化后置增强阶段

7.销毁阶段

7.1 销毁前阶段

7.2 销毁中阶段


1.元信息配置阶段

????????Spring 最早支持在 xml 中配置 Bean 的元信息,这些 bean 元信息的配置都处于资源文件中,由于需要大量手工配置,因此目前使用比较多的是注解,配合类扫描使我们不必将配置元信息限制在某一文件中。? ???

2.元信息解析阶段(封装BeanDefinition)

????????存储在xml中的信息Spring需要先读取,然后将读取到的元信息封装到一个Java对象中,这个对象就是BeanDefinition。读取时用到了BeanDefinitionReader这个类,详细类图如下:?

????????AbstractBeanDefinitionReader 将各种资源转换为 Resource,其子类分别从 Resource 中解析 bean,XmlBeanDefinitionReader 用于解析 xml 文件、PropertiesBeanDefinitionReader 用于解析 properties 文件,GroovyBeanDefinitionReader 用于解析 groovy 文件,使用这种方式可以很方便的进行扩展。详细细节可见我《Spring创建BeanDefinition全流程解析(5.2.x)》这篇博文。

3.Bean注册阶段

????????bean 注册是指将表示 bean 元信息的 BeanDefinition 保存在 Spring 中,Spring 注册 BeanDefinition 的类为 BeanDefinitionRegistry ,使用 BeanDefinitionReader 加载或者注册 bean 的时候便会通过 BeanDefinitionRegistry#registerBeanDefinition 方法注册 BeanDefinition,Spring 内部 BeanDefinitionRegistry 的实现是 DefaultListableBeanFactory,使用了 一个 Map<String, BeanDefinition> 保存 BeanDefinition,其中键为 bean 的名称。

4.实例化阶段

????????如果 Spring BeanFactory 中没有添加 InstantiationAwareBeanPostProcessor ,那么就会走正常的流程实例化 bean,此时需要根据参数解析出需要调用的构造方法或者工厂方法。不管是构造方法还是工厂方法最后都会委托到 InstantiationStrategy#instantiate,默认的 InstantiationStrategy 实现是 CglibSubclassingInstantiationStrategy,可用于创建 bean 时通过 Cglib 生成代理。实例化 bean 的具体代码,感兴趣的小伙伴可参见AbstractAutowireCapableBeanFactory#createBeanInstance。

5.属性赋值阶段

????????实例化后需要把Bean所需要的属性值或所需要的依赖注入到Bean对象中,解决循环依赖也是在这个过程中。详细细节在AbstractAutowireCapableBeanFactory#populateBean方法中

6.初始化阶段

????????Spring 初始化是指调用某些初始化的方法。

6.1 Aware接口回调阶段

????????Spring BeanFactory 在 bean 初始化前首先会调用 Aware 相关的接口,代码位置为 AbstractAutowireCapableBeanFactory#invokeAwareMethods,对于 BeanFactory,会分别调用 BeanNameAware#setBeanName、BeanClassLoaderAware#setBeanClassLoader 以及 BeanFactoryAware#setBeanFactory 方法。

6.2 实例化前置增强阶段

????????Bean 初始化前 Spring 将首先调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法。

6.3 调用初始化

????????如果XML中配置了自定义初始化方法,那么就会调用AbstractAutowireCapableBeanFactory#invokeCustomInitMethod方法

6.4 实例化后置增强阶段

????????Bean 初始化后 Spring 会调用?BeanPostProcessor 的 postProcessAfterInitialization 方法。

7.销毁阶段

????????通常情况我们不会手动对 bean 进行销毁,Spring 应用上下文关闭之后才会 bean 进行自动销毁。Spring 将销毁阶段又划分为销毁前和销毁中阶段。

7.1 销毁前阶段

????????为了通知到用户 Spring 将对 bean 进行销毁,Spring 同样提供了扩展点,方法为DestructionAwareBeanPostProcessor#postProcessBeforeDestruction,该方法将在 Spring 指定销毁方法前调用:

7.2 销毁中阶段

????????这个阶段是 Spring 真正销毁 bean 的阶段,会调用 bean 的销毁方法。如果xml中配置了自定义销毁方法,在DisposableBeanAdapter#invokeCustomDestroyMethod方法:

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:33:33  更:2022-05-01 15:34:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:53:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码