Spring中Bean的“一生”(生命周期)

文章目录

  • 一、图解
  • 二、文字解析
  • 总结


一、图解

在这里插入图片描述>注:处于同一行的执行顺序是从左往右

二、文字解析

SpringBean的生命周期总体分为四个阶段:实例化=>属性注入=>初始化=>销毁

  • Step1 ==实例化Bean:==根据配置文件中Bean的定义,利用JavaReflection反射技术创建Bean的实例(还是一个半成品
  • Step2 注入对象依赖的属性值(对象)
  • Step3 处理各种Aware接口: Spring会检测该Bean是否实现了xxxAware接口,通过此类型的接口,可以让Spring框架为当前Bean注入相应的内容。
    • 如果实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean的名字
    • 如果实现BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,注入的是Spring工厂
    • 如果实现的是ApplicationContextAware接口,会调用setApplicationContext()方法,注入Spring上下文
  • Step4 执行BeanPostProcessor前置处理: 如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现BeanPostProcessor接口,将会在该阶段调用postProcessBeforeInitialization(Object obj,String s)方法
  • Step5 执行InitializingBean初始化方法: 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法
  • Step6 执行init-method自定义初始化方法: 如果BeanSpring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法
  • Step7 执行BeanPostProcessor后置处理: 如果这个Bean实现BeanPostProcessor接口,将会在该阶段调用**postProcessAfterInitialization(Object obj,String s)**方法
  • 以上步骤完成之后,Bean已经被真正创建,可以正常使用了
  • Step8 执行DisposableBean销毁Bean:Bean不再需要时,会经过清理阶段,如果实现了DisposableBean接口,则会调用destroy()方法执行销毁
  • Step9 执行destroy-method自定义销毁方法: 如果BeanSpring配置文件中配置了destroy-method属性,则会自动调用其配置的销毁方法

总结

  • 首先是实例化属性赋值初始化销毁这 4 个大阶段;
  • 再是初始化的具体操作,有 Aware 接口的依赖注入BeanPostProcessor 在初始化前后的前后置处理以及 InitializingBean 和 配置类加载的init-method 的初始化操作;
  • 实现 DisposableBean 接口调用destory()方法销毁以及配置类加载的destory-method销毁方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/59585.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyCat管理及监控——zookeeper及MyCat-web安装

1.MyCat管理 2.MyCat-eye 3.zookeeper安装 第一步:解压 第二部: 切换目录,创建data文件夹 第三步:修改zookeeper配置文件 这样zookeeper安装及配置就完成了 4.MyCat-web安装 注意mycat-web要与zookeeper关联,…

Effective Java笔记(26)请不要使用原生态类型

首先介绍一些术语 。 声明中具有一个或者多个类型参数( type parameter )的类或者接口,就是泛型( generic )类或者接口 。 例如,List 接口就只有单个类型参数 E ,表示列表的元素类型 。这个接口…

如何识别手机是否有灵动岛(dynamic island)

如何识别手机是否有灵动岛(dynamic island) 灵动岛是苹果2022年9月推出的iPhone 14 Pro、iPhone 14 Pro Max首次出现,操作系统最低是iOS16.0。带灵动岛的手机在竖屏时顶部工具栏大于等于51像素。 #define isHaveDynamicIsland ({ BOOL isH…

【原创】基于JavaWeb的婚礼策划平台

主要功能介绍:系统基于Java语言开发。整个程序属于B/S架构应用。在开发的时候,将婚礼策划中主要的业务如:婚纱摄影预约以及婚纱租赁等作为主要的目标和研究方向。婚礼策划平台系统从整体结构设计上,由网站前台和系统后台组成。网站…

gSpan算法执行步骤详解示例

目录 1. 问题描述2. gSpan算法步骤2.1 数据预处理2.2 深度递归挖掘频繁子图2.2.1 获取所有的频繁边2.2.2 深度递归挖掘频繁子图 参考文献 1. 问题描述 gSpan 是一款图规则挖掘算法,目标是从现有的图集中挖掘频繁子图。如下图中包含三个图: 其中圆圈为顶…

Explorable Tone Mapping Operators

Abstract 色调映射在高动态范围(HDR)成像中起着至关重要的作用。 它的目的是在有限动态范围的介质中保存HDR图像的视觉信息。 虽然许多工作已经提出从HDR图像中提供色调映射结果,但大多数只能以一种预先设计的方式进行色调映射。 然而,声调映射质量的主…

LVS—DR集群的搭建

目录 lvs-dr模式工作原理: 搭建结构: 1、RS: 1)两台RS准备好httpd环境和测试文件 2)添加虚拟IP(vip)、添加访问本地vip的静态路由 并抑制ARP 2、DS: 1)安装ipvasadm…

UE4/5 GAS技能系统入门2 - AttributeSet

在GAS系统中对属性进行修改需要用到GE(Gameplay Effect),而这又涉及到AttributeSet这样的概念。 AttributeSet用于描述角色的属性集合,如攻击力、血量、防御力等,与GAS系统整合度较高,本文就来讲一讲Attri…

【毕业项目】自主设计HTTP

博客介绍:运用之前学过的各种知识 自己独立做出一个HTTP服务器 自主设计WEB服务器 背景目标描述技术特点项目定位开发环境WWW介绍 网络协议栈介绍网络协议栈整体网络协议栈细节与http相关的重要协议 HTTP背景知识补充特点uri & url & urn网址url HTTP请求和…

数据结构—哈夫曼树及其应用

5.6哈夫曼树及其应用 5.6.1哈夫曼树的基本概念 路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 结点的路径长度:两结点间路径上的分支数。 树的路径长度:从树根到每一个结点的路径长度之和。记作 TL 结点数目相同的…

prometheus部署

一、前言 Prometheus 是一个开源的系统监控和警报工具,用于收集、存储和查询时间序列数据。它旨在提供高效的多维数据收集和查询功能,帮助用户监控其应用程序和基础设施的性能,并在出现问题时触发警报,总来得说prometheus是用来收…

GO学习之 网络通信(Net/Http)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、 文章目录 GO系列前言一、H…