当前位置: 首页 > news >正文

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 的名称、工厂、上下文等进行操作或者引用
对应接口有三个:

  1. BeanNameAware:获取自己在 Spring 容器中的名称,即 Bean 的 ID。通过调用 setBeanName() 方法传入 Bean 的名称。

  2. BeanFactoryAware:获取到所属的 BeanFactory,即 Spring 容器本身的引用。通过调用 setBeanFactory() 方法传入 BeanFactory 的引用。

  3. ApplicationContextAware:获取到所属的 Spring 应用上下文的引用。通过调用 setApplicationContext() 方法传入 ApplicationContext 的引用。

4.BeanPostProcessor接口

  1. postProcessBeforeInitialization(Object bean, String beanName):

    • 该方法在 Bean 的初始化之前被调用。
    • 返回值为 Object,表示修改或替换原始的 Bean 对象。
    • 可以用来实现一些预处理操作,例如属性赋值或依赖注入。
    • 应用举例:对bean中指定属性加解密,如下代码👇
  2. 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分区工具&#xff1a;sudo apt-get install gparted 启动gparted并resize分区 4.最后最好建一个快照&#xff0c;不然gg了…...

Nginx搭建本地服务器,无需购买服务器即可测试vue项目打包后的效果

一.前言 本文是在windows环境&#xff08;Linux环境下其实也大同小异&#xff09;下基于Nginx实现搭建本地服务器&#xff0c;手把手教你部署vue项目。 二.Nginx入门 1&#xff09;下载安装 进入Nginx官网下载&#xff0c;选择stable版本下的windows版本下载即可 2&#xff09;…...

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 &#xff1f; Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用&#xff0c;将数据在实体类和数据库记录之间进行转换。 ----------------------------------------------------- DAO模式的组成部分 …...

小程序扫描二维码获取网址,通过Jsoup进行解析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、Jsoup是什么&#xff1f; 二、使用步骤 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 …...

客服如何减轻工作压力?浅析客服压力管理方法

在现代商业领域中&#xff0c;客服是一项非常重要的工作&#xff0c;负责根据客户需求提供解决方案。客服工作不仅需要一定的专业知识和技能&#xff0c;还需要面对各种复杂、多变的情况&#xff0c;并拥有强大的应对压力的能力。客服从业人员的工作压力往往非常大&#xff0c;…...

知识储备--基础算法篇-二分搜索

1.前言 最近准备开始刷算法题了&#xff0c;搜了很多相关的帖子&#xff0c;下面三个很不错&#xff0c; 计算机视觉秋招准备过程看这个&#xff1a;​​​​​​计算机视觉算法工程师-秋招面经 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/399813916 复习深度学习相关…...

【MySQL系列】表内容的基本操作(增删查改)

「前言」文章内容大致是对MySQL表内容的基本操作&#xff0c;即增删查改。 「归属专栏」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 的整数数组&#xff0c;请你找出未在数组中出现过的最小正整数。 样例 输入1&#xff1a;[-5, 3, 2, 3]输出1&#xff1a;1输入2&#xff1a;[1, 2, 3]输出2&#xff1a;4数据范围 1≤n≤105 , 数组中元素的取值范围 [−109,109]。 代码&#xff1a; c…...

易服客工作室:WordPress是什么?初学者的解释

目录 什么是WordPress&#xff1f; WordPress可以制作什么类型的网站&#xff1f; 谁制作了WordPress&#xff1f;它已经存在多久了&#xff1f; 谁使用 WordPress&#xff1f; 白宫网站 微软 滚石乐队 为什么要使用 WordPress&#xff1f; WordPress 是免费且…...

2019年9月全国计算机等级考试真题(C语言二级)

2019年9月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 1、“商品”与“顾客”两个实体集之间的联系一般是 A. 一对一 B. 一对多 C. 多对一 D. 多对多 正确答案&#xff1a;D 第2题 定义学生选修课程的关系模式&#xff1a;SC&#xff08;S#&#xff0c…...

LLaMA模型泄露 Meta成最大受益者

一份被意外泄露的谷歌内部文件&#xff0c;将Meta的LLaMA大模型“非故意开源”事件再次推到大众面前。“泄密文件”的作者据悉是谷歌内部的一位研究员&#xff0c;他大胆指出&#xff0c;开源力量正在填平OpenAI与谷歌等大模型巨头们数年来筑起的护城河&#xff0c;而最大的受益…...

企业中商业智能BI,常见的工具和技术

商业智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据&#xff0c;从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…...

item_password-获得淘口令真实url

一、接口参数说明&#xff1a; item_password-获得淘口令真实url &#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_password 名称类型必须描述keyString是调用key&#xff08…...

基于SOLIDWORKS配置功能建立塑料模具标准件库

在塑料模具的设计过程中&#xff0c;建立其三维模型对于后续进行CAE分析和CAM加工是非常重要的。除了型腔和型芯以外&#xff0c;塑料模具中的标准件很多&#xff0c;如推杆、导柱、导套、推板、限位钉等&#xff0c;这些对于不同的产品是需要反复调用的。目前&#xff0c;我国…...

1.物联网LWIP网络,TCP/IP协议簇

一。TCP/IP协议簇 1.应用层&#xff1a;FTP&#xff0c;HTTP&#xff0c;Telent&#xff0c;DNS&#xff0c;RIP 2.传输层&#xff1a;TCP&#xff0c;UDP 3.网络层&#xff1a;IPV4&#xff0c;IPV6&#xff0c;OSPF&#xff0c;EIGRP 4.数据链路层&#xff1a;Ethernet&#…...

企业级流程建模前端架构:基于Vite+Vue3的低代码解决方案

企业级流程建模前端架构&#xff1a;基于ViteVue3的低代码解决方案 【免费下载链接】vite-vue-bpmn-process 基于 Vite TypeScript Vue3 NaiveUI Bpmn.js 的流程编辑器&#xff08;前端部分&#xff09;。支持高度自定义&#x1f680;&#x1f680;&#x1f680;。Vue 2 版本…...

从零开始:如何为你的深度学习项目选择最合适的开源数据集

从零开始&#xff1a;如何为你的深度学习项目选择最合适的开源数据集 当你站在深度学习项目的起点&#xff0c;面对琳琅满目的开源数据集时&#xff0c;如何做出明智的选择往往决定了项目的成败。数据集不仅是模型训练的"原材料"&#xff0c;更是影响最终性能的关键变…...

Homebrew卸载与重装指南:彻底清理残留文件的正确姿势

Homebrew深度清理与重装实战&#xff1a;从残留文件追踪到ARM架构优化 每次系统升级或开发环境切换时&#xff0c;那些隐藏在系统深处的Homebrew残留文件就像房间里扫不尽的灰尘——明明已经卸载了所有公式&#xff0c;却在重新安装时遇到各种诡异的权限错误或版本冲突。作为m…...

PostgreSQL 模式级权限迁移:一键批量修改所有表与对象的所有者

1. 为什么需要批量修改PostgreSQL对象所有者&#xff1f; 在实际的数据库运维工作中&#xff0c;经常会遇到需要批量修改数据库对象所有者的情况。我遇到过不少这样的场景&#xff1a;公司部门重组后&#xff0c;原先由开发团队A负责的项目转交给团队B维护&#xff1b;或者某个…...

终极风扇控制指南:如何用FanControl 264版彻底告别电脑噪音烦恼

终极风扇控制指南&#xff1a;如何用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版)

目录 一、基础能力&#xff08;所有AI工程师的底座&#xff09; 1 编程语言 2 数据结构与算法 3 数学基础 二、深度学习基础 深度学习模型基础 三、大模型核心技术 1 Transformer架构 2 预训练 3 Tokenizer 四、大模型训练体系 1 分布式训练 2 训练优化技术 3 微…...

软件工程实战:如何用数据流图搞定图书馆管理系统设计(附避坑指南)

软件工程实战&#xff1a;如何用数据流图搞定图书馆管理系统设计&#xff08;附避坑指南&#xff09; 图书馆管理系统是软件工程课程中的经典案例&#xff0c;但许多初学者在绘制数据流图时容易陷入"画了等于没画"的困境——要么遗漏关键外部实体&#xff0c;要么数据…...

从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比

1. YOLO系列模型的技术演进路径 YOLO&#xff08;You Only Look Once&#xff09;系列模型作为目标检测领域的标杆算法&#xff0c;从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新&#xff0c;这使得YOLO系列在实时目标检测任务中始终…...

YOLO_World+SAM+GraspNet在mujoco中的抓取仿真实战:从环境搭建到代码运行

YOLO_WorldSAMGraspNet在MuJoCo中的抓取仿真实战&#xff1a;从环境搭建到代码运行 在机器人抓取仿真领域&#xff0c;结合YOLO_World、SAM&#xff08;Segment Anything Model&#xff09;和GraspNet三大前沿技术&#xff0c;能够在MuJoCo物理引擎中实现高度逼真的物体识别、分…...

深入剖析大数据领域数据分片的优缺点

深入剖析大数据领域数据分片的优缺点 关键词&#xff1a;数据分片、大数据架构、分片策略、水平扩展、分布式系统 摘要&#xff1a;在大数据时代&#xff0c;单台服务器已无法承载海量数据的存储与计算需求&#xff0c;数据分片&#xff08;Sharding&#xff09;作为分布式系统…...