Spring Bean的初始化过程是怎么样的?

news2025/1/7 4:13:20

文章内容收录到个人网站,方便阅读:http://hardyfish.top/

文章内容收录到个人网站,方便阅读:http://hardyfish.top/

文章内容收录到个人网站,方便阅读:http://hardyfish.top/

在这里插入图片描述

Spring Bean 的初始化过程主要可以分为几个阶段,下面是一个概述:

1. 实例化

当 Spring 容器创建一个 Bean 时,首先会通过反射机制调用其构造函数进行实例化。

2. 设置属性

在实例化之后,Spring 会为 Bean 设置属性,这些属性通常来自于配置文件(如 XML、Java 配置或注解)。Spring 会调用所有的 setter 方法来设置 Bean 的属性值。

3. Aware 接口回调

如果 Bean 实现了某些 Aware 接口(如 BeanNameAwareBeanClassLoaderAwareBeanFactoryAware 等),Spring 会在设置完属性后调用相应的方法。这些方法允许 Bean 获取一些 Spring 的上下文信息。

4. BeanPostProcessor 的处理

  • 前初始化:如果有实现了 BeanPostProcessor 接口的 Bean,Spring 会调用它们的 postProcessBeforeInitialization 方法。这可以让开发者在 Bean 初始化前进行一些自定义处理。

5. 初始化方法

初始化方法可以通过以下几种方式定义:

  • 实现 InitializingBean 接口的 afterPropertiesSet 方法。
  • 在 Bean 的类中使用 @PostConstruct 注解标记一个初始化方法。
  • 在 XML 配置或 Java 配置中通过 init-method 属性指定一个初始化方法。

6. BeanPostProcessor 的后处理

  • 后初始化:在初始化方法执行后,再次调用 BeanPostProcessorpostProcessAfterInitialization 方法,以允许进行后续处理。

7. Bean 可用

经过上述步骤后,Bean 完全初始化并可以在 Spring 容器中使用。

8. 销毁过程

当容器关闭或 Bean 被销毁时,会调用销毁方法:

  • 实现 DisposableBean 接口的 destroy 方法。
  • 使用 @PreDestroy 注解标记的销毁方法。
  • 在 XML 配置或 Java 配置中通过 destroy-method 属性指定的销毁方法。

总结

整个过程可以简化为:

  1. 实例化 Bean
  2. 设置属性
  3. Aware 接口回调
  4. 前初始化处理(postProcessBeforeInitialization
  5. 执行初始化方法
  6. 后初始化处理(postProcessAfterInitialization
  7. Bean 可用
  8. 销毁过程(当需要时)

这种机制使得 Spring 提供了灵活的 Bean 生命周期管理,可以通过不同的钩子和配置来满足应用的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速上手LangChain(四)LangChain Hub和LangSmith

文章目录 快速上手LangChain(四)LangChain Hub和LangSmith什么是LangChain HubLangChain Hub功能 LangSmith使用 快速上手LangChain(四)LangChain Hub和LangSmith 什么是LangChain Hub LangChain Hub官网地址:https:…

无人机遥控器频率解析!

1.4GHz无人机遥控器工作核心技术 传输距离:1.4GHz频率的无人机遥控器具有较远的传输距离,这使得无人机可以在较大范围内与地面控制站或其他通信节点进行可靠的通信。这种特性特别适用于需要覆盖较大区域的任务或远距离飞行的场景。 穿透力:…

TypyScript从入门到精通

TypyScript从入门到精通 TypyScript 是什么?增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型:3.…

RabbitMq的Java项目实践

在现代软件开发中,消息队列(Message Queue,简称MQ)作为一种重要的组件,承担着上下游消息传递和通信的重任。RabbitMQ作为一款流行的开源消息队列中间件,凭借其高可用性、可扩展性和易用性等特点&#xff0c…

CK40N或CK24标准成本发布出现标记不到物料的情况:评估视图中允许的成本核算变式选择错误

用户打电话反馈标准成本发布在标记环节出现错误: 检查: 1、MM03已经维护了税价1。 2、CK13N: 没有成本没本滚算。 用户是用CK40N处理的, 我让他用CK11N/CK24再处理一次。 仍然报错. 我也试了一个也是报错。 准备CRK1删除原来的…

【HENU】河南大学计院2024 计算机体系结构 期末复习知识点

和光同尘_我的个人主页 一直游到海水变蓝。 体系结构 第一章:计算机系统基础知识计算机系统的实质计算机系统的设计的4个定量原理Amdahl定律CPU性能公式程序的局部性原理: 第二章:指令系统的设计指令系统结构的分类通用寄存器型结构 哈夫曼编码MIPS指令…

Docker 远程访问完整配置教程以及核心参数理解

Docker 远程访问完整配置教程 以下是配置 Docker 支持远程访问的完整教程,包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置,以及验证远程访问的详细步骤。 1. 理解 -H fd:// 参数的作用(理解了以后容易理解后面的操作&#xff…

如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13

您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

Postman测试big-event

报错500。看弹幕&#xff0c;知道可能是yml或sql有问题。 所以检查idea工作台&#xff0c; 直接找UserMapper检查&#xff0c;发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题&#xff0c;而且是有now()的那个sql。 之后通过给的课件&#xff0c;复制课件…

Wonder Dynamics技术浅析(八):实拍与虚拟合成

该模块旨在将实拍视频与计算机生成的虚拟场景无缝融合&#xff0c;生成具有高度真实感的视觉效果。 一、实拍视频与虚拟场景合成概述 实拍视频与虚拟场景合成的主要目标是将实拍视频中的元素与计算机生成的虚拟场景进行无缝融合&#xff0c;生成具有高度真实感的最终影像。 …

Javascript算法——回溯算法(子集和全排列问题)

子集问题 思路 如果把 子集问题、组合问题、分割问题都抽象为一棵树的话&#xff0c;那么组合问题和分割问题都是收集树的叶子节点&#xff0c;而子集问题是找树的所有节点&#xff01; 78.子集 相比组合问题&#xff0c;此子集问题题目更为简单&#xff0c;收集的是树的所有…

网络安全系统学习实验1:RDP远程登录配置

准备工作&#xff1a; 0、准备好虚拟机 1、服务器侧&#xff08;虚拟机Windows 2003-01&#xff09;IP地址&#xff1a; # 获得服务器的IP地址192.168.58.223 ipconfig /all2、客户端侧(虚拟机Win7 pte_czj)IP地址&#xff1a; # 客户端侧IP地址192.168.58.222 ipconfig /al…

SMMU软件指南之系统架构考虑

安全之安全(security)博客目录导读 目录 5.1 I/O 一致性 5.2 客户端设备 5.2.1 地址大小 5.2.2 缓存 5.3 PCIe 注意事项 5.3.1 点对点通信 5.3.2 No_snoop 5.3.3 ATS 5.4 StreamID 分配 5.5 MSI 本博客介绍与 SMMU 相关的一些系统架构注意事项。 5.1 I/O 一致性 如…

[网络安全]sqli-labs Less-3 解题详析

判断注入类型 GET1 and 11&#xff0c;回显如下&#xff1a;GET1 and 12&#xff1a;没有回显&#xff0c;说明该漏洞类型为GET型单引号字符型注入 判断注入点个数 GET1 order by 2 --&#xff0c;回显如下&#xff1a;由上图可知&#xff0c;sql语法中给$id加上了() 猜测后…

vulnhub Earth靶机

搭建靶机直接拖进来就行 1.扫描靶机IP arp-scan -l 2.信息收集 nmap -sS -A -T4 192.168.47.132 得到两个DNS; 在443端口处会让我们加https dirb https://earth.local/ dirb https://terratest.earth.local/ #页面下有三行数值 37090b59030f11060b0a1b4e0000000000004312170a…

AWS 申请证书、配置load balancer、配置域名

申请AWS证书 点击 request 申请完证书&#xff0c;AWS 会验证你对于域名的所有权&#xff0c;有两种方式&#xff0c;DSN 验证和邮箱验证。 这里说一下DSN 验证&#xff0c;上图中 Domains 中有CNAME name 和 CNAME value 。 在domain 网站中添加一个CNAME DSN 项&#xff0c;…

【WPF】 数据绑定机制之INotifyPropertyChanged

INotifyPropertyChanged 是 WPF 中的一个接口&#xff0c;用于实现 数据绑定 中的 属性更改通知。它的主要作用是&#xff0c;当对象的某个属性值发生更改时&#xff0c;通知绑定到该属性的 UI 控件更新其显示内容。 以下是有关 INotifyPropertyChanged 的详细信息和实现方法&…

基于Spring Boot的IT技术交流和分享平台的设计与实现源码

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的IT技术交流和分享平台的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于S…

齿轮缺陷检测数据集VOC+YOLO格式485张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;485 标注数量(xml文件个数)&#xff1a;485 标注数量(txt文件个数)&#xff1a;485 标注…