Spring-Bean的生命周期
目录
生命周期汇总
细分生命周期
1.实例化
2.属性赋值(依赖注入)
3.Aware接口
4.BeanPostProcessor接口
5.初始化
6.销毁
测试验证
类结构
业务类
测试类
生命周期汇总
Spring Bean 的生命周期见下图
(一定记忆好下图)

细分生命周期
1.实例化
当 Spring 容器加载配置文件时,会根据配置创建 Bean 的实例。这个阶段主要是进行对象实例的创建,使用无参构造方法或工厂方法。
2.属性赋值(依赖注入)
Spring 容器会调用对象的 set 方法或使用注解来为 Bean 的属性进行赋值。这个阶段可以进行各种依赖关系的注入,比如通过构造函数、setter 方法、注解等方式。
3.Aware接口
用来让 Bean 对某些特定信息感知(aware)的接口,它们可以通过实现相应的 Aware 接口来获取容器的相关信息。在 Bean 初始化的过程中,进行一些自定义的操作,例如对 Bean 的名称、工厂、上下文等进行操作或者引用
对应接口有三个:
BeanNameAware:获取自己在 Spring 容器中的名称,即 Bean 的 ID。通过调用 setBeanName() 方法传入 Bean 的名称。
BeanFactoryAware:获取到所属的 BeanFactory,即 Spring 容器本身的引用。通过调用 setBeanFactory() 方法传入 BeanFactory 的引用。
ApplicationContextAware:获取到所属的 Spring 应用上下文的引用。通过调用 setApplicationContext() 方法传入 ApplicationContext 的引用。
4.BeanPostProcessor接口
postProcessBeforeInitialization(Object bean, String beanName):
- 该方法在 Bean 的初始化之前被调用。
- 返回值为 Object,表示修改或替换原始的 Bean 对象。
- 可以用来实现一些预处理操作,例如属性赋值或依赖注入。
- 应用举例:对bean中指定属性加解密,如下代码👇
postProcessAfterInitialization(Object bean, String beanName):
- 该方法在 Bean 的初始化之后被调用。
- 返回值为 Object,表示修改或替换原始的 Bean 对象。
- 可以用来实现一些后处理操作,例如添加额外的功能或修改 Bean 实例,常见应用场景如AOP。
@Component
public class UserService implements BeanPostProcessor {private String password;// Getter and Setter for password@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof UserService) {UserService userService = (UserService) bean;// 在这里对 password 进行解密操作String decryptedPassword = decrypt(userService.getPassword());userService.setPassword(decryptedPassword);}return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}private String decrypt(String encryptedPassword) {// 实现解密逻辑// ...return decryptedPassword;}
}
5.初始化
在属性赋值完成后,Spring 容器会调用 Bean 的初始化方法(可以通过实现 InitializingBean 接口或自定义初始化方法(自定义的示例如下👇)来指定),进行一些初始化操作,比如连接数据库、加载数据等。
@PostConstructpublic void init() {System.out.println("自定义初始化方法");}
6.销毁
当 Spring 容器关闭或移除 Bean 时,会调用 Bean 的销毁方法(可以通过实现 DisposableBean 接口或配置 destroy-method 方法来指定)。在这个阶段可以进行一些资源释放、清理操作,比如关闭数据库连接、释放文件句柄等。
测试验证
git地址:先跟着流程图记忆好生命周期,根据自己理解到的自己手写
SpringBean: SpringBean生命周期
如下是截图参考,根据自己喜好选择clone代码或者截图
类结构

业务类

测试类
public class UserTest {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);User user = ctx.getBean(User.class);System.out.println(user);}
}
根据控制台打印即可看到Bean的生命周期执行过程
如果想掌握本篇,那就静下心 动起手 搞一遍
相关文章:
Spring-Bean的生命周期
目录 生命周期汇总 细分生命周期 1.实例化 2.属性赋值(依赖注入) 3.Aware接口 4.BeanPostProcessor接口 5.初始化 6.销毁 测试验证 类结构 业务类 测试类 生命周期汇总 Spring Bean 的生命周期见下图 (一定记忆好下图&#x…...
Cat(3):客户端集成—简单案例
接下来编写一个简单的springboot与Cat整合的案例 1 新建springboot项目 首先创建一个Spring Boot的初始化工程。只需要勾选web依赖即可。 2 添加 Maven 添加依赖 <dependency><groupId>com.dianping.cat</groupId><artifactId>cat-client</artifa…...
虚拟机/双系统Ubuntu扩容
虚拟机Ubuntu扩容 1.需要删除所有的快照 2.扩展虚拟机磁盘大小 虚拟机(M)→设置(s)→硬盘(SCSI)→扩展磁盘容量 3.Ubuntu内调整分区大小 安装gparted分区工具:sudo apt-get install gparted 启动gparted并resize分区 4.最后最好建一个快照,不然gg了…...
Nginx搭建本地服务器,无需购买服务器即可测试vue项目打包后的效果
一.前言 本文是在windows环境(Linux环境下其实也大同小异)下基于Nginx实现搭建本地服务器,手把手教你部署vue项目。 二.Nginx入门 1)下载安装 进入Nginx官网下载,选择stable版本下的windows版本下载即可 2)…...
SpringBoot 接口调用出现乱码解决 中文乱码
SpringBoot 接口调用出现乱码解决 package com.cxjg.mvc.util;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springfra…...
JDBC封装与设计模式
什么是 DAO ? Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用,将数据在实体类和数据库记录之间进行转换。 ----------------------------------------------------- DAO模式的组成部分 …...
小程序扫描二维码获取网址,通过Jsoup进行解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、Jsoup是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 vx开发小程序使用扫一扫时不同二维码展示的东西不一样,需要进行解析 提示&a…...
Kubernetes+EFK构建日志分析平台
目录 Elasticsearch产品介绍 Fluentd 工作原理 Kibana产品介绍 一、环境准备 前三个主机都要操作 1、主机初始化配置 2、部署docker环境 2、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml …...
客服如何减轻工作压力?浅析客服压力管理方法
在现代商业领域中,客服是一项非常重要的工作,负责根据客户需求提供解决方案。客服工作不仅需要一定的专业知识和技能,还需要面对各种复杂、多变的情况,并拥有强大的应对压力的能力。客服从业人员的工作压力往往非常大,…...
知识储备--基础算法篇-二分搜索
1.前言 最近准备开始刷算法题了,搜了很多相关的帖子,下面三个很不错, 计算机视觉秋招准备过程看这个:计算机视觉算法工程师-秋招面经 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/399813916 复习深度学习相关…...
【MySQL系列】表内容的基本操作(增删查改)
「前言」文章内容大致是对MySQL表内容的基本操作,即增删查改。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表内容的增删查改1.1 Create1.1.1 单行数据全列插入1.1.2 多行数据指定列插入1.1.3 插入否则更新1.1.4 数据替换 1.2 Ret…...
docker搭建LNMP
docker安装 略 下载镜像 nginx:最新版php-fpm:根据自己需求而定mysql:根据自己需求定 以下是我搭建LNMP使用的镜像版本 rootVM-12-16-ubuntu:/docker/lnmp/php/etc# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8.0…...
未出现过的最小正整数
给定一个长度为 n 的整数数组,请你找出未在数组中出现过的最小正整数。 样例 输入1:[-5, 3, 2, 3]输出1:1输入2:[1, 2, 3]输出2:4数据范围 1≤n≤105 , 数组中元素的取值范围 [−109,109]。 代码: c…...
易服客工作室:WordPress是什么?初学者的解释
目录 什么是WordPress? WordPress可以制作什么类型的网站? 谁制作了WordPress?它已经存在多久了? 谁使用 WordPress? 白宫网站 微软 滚石乐队 为什么要使用 WordPress? WordPress 是免费且…...
2019年9月全国计算机等级考试真题(C语言二级)
2019年9月全国计算机等级考试真题(C语言二级) 第1题 1、“商品”与“顾客”两个实体集之间的联系一般是 A. 一对一 B. 一对多 C. 多对一 D. 多对多 正确答案:D 第2题 定义学生选修课程的关系模式:SC(S#,…...
LLaMA模型泄露 Meta成最大受益者
一份被意外泄露的谷歌内部文件,将Meta的LLaMA大模型“非故意开源”事件再次推到大众面前。“泄密文件”的作者据悉是谷歌内部的一位研究员,他大胆指出,开源力量正在填平OpenAI与谷歌等大模型巨头们数年来筑起的护城河,而最大的受益…...
企业中商业智能BI,常见的工具和技术
商业智能(Business Intelligence,简称BI)数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据,从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…...
item_password-获得淘口令真实url
一、接口参数说明: item_password-获得淘口令真实url ,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_password 名称类型必须描述keyString是调用key(…...
基于SOLIDWORKS配置功能建立塑料模具标准件库
在塑料模具的设计过程中,建立其三维模型对于后续进行CAE分析和CAM加工是非常重要的。除了型腔和型芯以外,塑料模具中的标准件很多,如推杆、导柱、导套、推板、限位钉等,这些对于不同的产品是需要反复调用的。目前,我国…...
1.物联网LWIP网络,TCP/IP协议簇
一。TCP/IP协议簇 1.应用层:FTP,HTTP,Telent,DNS,RIP 2.传输层:TCP,UDP 3.网络层:IPV4,IPV6,OSPF,EIGRP 4.数据链路层:Ethernet&#…...
企业级流程建模前端架构:基于Vite+Vue3的低代码解决方案
企业级流程建模前端架构:基于ViteVue3的低代码解决方案 【免费下载链接】vite-vue-bpmn-process 基于 Vite TypeScript Vue3 NaiveUI Bpmn.js 的流程编辑器(前端部分)。支持高度自定义🚀🚀🚀。Vue 2 版本…...
从零开始:如何为你的深度学习项目选择最合适的开源数据集
从零开始:如何为你的深度学习项目选择最合适的开源数据集 当你站在深度学习项目的起点,面对琳琅满目的开源数据集时,如何做出明智的选择往往决定了项目的成败。数据集不仅是模型训练的"原材料",更是影响最终性能的关键变…...
Homebrew卸载与重装指南:彻底清理残留文件的正确姿势
Homebrew深度清理与重装实战:从残留文件追踪到ARM架构优化 每次系统升级或开发环境切换时,那些隐藏在系统深处的Homebrew残留文件就像房间里扫不尽的灰尘——明明已经卸载了所有公式,却在重新安装时遇到各种诡异的权限错误或版本冲突。作为m…...
PostgreSQL 模式级权限迁移:一键批量修改所有表与对象的所有者
1. 为什么需要批量修改PostgreSQL对象所有者? 在实际的数据库运维工作中,经常会遇到需要批量修改数据库对象所有者的情况。我遇到过不少这样的场景:公司部门重组后,原先由开发团队A负责的项目转交给团队B维护;或者某个…...
终极风扇控制指南:如何用FanControl 264版彻底告别电脑噪音烦恼
终极风扇控制指南:如何用FanControl 264版彻底告别电脑噪音烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…...
最完整的大模型算法工程师技术栈图谱(2026版)
目录 一、基础能力(所有AI工程师的底座) 1 编程语言 2 数据结构与算法 3 数学基础 二、深度学习基础 深度学习模型基础 三、大模型核心技术 1 Transformer架构 2 预训练 3 Tokenizer 四、大模型训练体系 1 分布式训练 2 训练优化技术 3 微…...
软件工程实战:如何用数据流图搞定图书馆管理系统设计(附避坑指南)
软件工程实战:如何用数据流图搞定图书馆管理系统设计(附避坑指南) 图书馆管理系统是软件工程课程中的经典案例,但许多初学者在绘制数据流图时容易陷入"画了等于没画"的困境——要么遗漏关键外部实体,要么数据…...
从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比
1. YOLO系列模型的技术演进路径 YOLO(You Only Look Once)系列模型作为目标检测领域的标杆算法,从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新,这使得YOLO系列在实时目标检测任务中始终…...
YOLO_World+SAM+GraspNet在mujoco中的抓取仿真实战:从环境搭建到代码运行
YOLO_WorldSAMGraspNet在MuJoCo中的抓取仿真实战:从环境搭建到代码运行 在机器人抓取仿真领域,结合YOLO_World、SAM(Segment Anything Model)和GraspNet三大前沿技术,能够在MuJoCo物理引擎中实现高度逼真的物体识别、分…...
深入剖析大数据领域数据分片的优缺点
深入剖析大数据领域数据分片的优缺点 关键词:数据分片、大数据架构、分片策略、水平扩展、分布式系统 摘要:在大数据时代,单台服务器已无法承载海量数据的存储与计算需求,数据分片(Sharding)作为分布式系统…...
