通俗易懂,Spring Bean生命周期管理的理解

目录

1、实例化阶段

2、初始化阶段

3、销毁阶段

总结


在Spring框架中,Bean是最基本的组件,它是Spring框架中的一个Java对象

下面通过@Bean来理解bean的生命周期:

@Bean(initMethod = "customInit", destroyMethod = "customDestroy")  
public LifecycleBean lifecycleBean() {  return new LifecycleBean();  
}

在Spring框架中,@Bean注解用于告诉Spring框架一个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。除了定义bean的创建方式之外,@Bean注解还提供了两个属性:initMethoddestroyMethod

这意味着,当Spring创建LifecycleBean的一个实例后,它会调用customInit()方法来完成初始化工作;同样,当这个bean被销毁(例如,Spring容器关闭时)时,它会调用customDestroy()方法来执行清理工作。

那么,我们现在可以知道,Bean的生命周期就是大致分为三个阶段:实例化阶段、初始化阶段和销毁阶段。

1、实例化阶段

创建bean的实例,根据bean定义中的类信息(通常是全限定类名)来调用相应的构造函数。

2、初始化阶段

完成bean供应用程序使用前的准备工作,包括:

  • 依赖注入:Spring根据bean定义中的依赖信息,将其他bean注入到当前bean中。这可以通过构造函数注入、setter方法注入或字段注入来实现。
  • 回调接口:如果bean实现了InitializingBean接口,Spring会调用其afterPropertiesSet()方法。此外,如果bean定义中指定了init-method属性,Spring会调用相应的自定义初始化方法。
  • @PostConstruct注解初始化一些逻辑:如果bean的方法上标记了@PostConstruct注解,Spring会在依赖注入完成后立即调用这个方法,完成初始化一些逻辑。
  • AOP代理:如果bean需要应用面向切面编程(AOP)的功能,Spring会在这个阶段为bean创建一个代理对象,以便拦截方法调用并执行相应的通知(advice)。

在初始化阶段完成后,bean就已经准备好供应用程序使用了,所有的依赖都已经被注入,且必要的初始化逻辑也已经执行完毕。

3、销毁阶段

当Spring IoC容器关闭或bean不再需要时,bean会进入销毁阶段。在这个阶段,Spring会执行一系列的操作来清理bean并释放相关资源。这包括:

  • 回调接口:如果bean实现了DisposableBean接口,Spring会调用其destroy()方法。此外,如果bean定义中指定了destroy-method属性,Spring会调用相应的自定义销毁方法。
  • @PreDestroy注解:如果bean的方法上标记了@PreDestroy注解,Spring会在bean销毁之前调用这个方法。这是Java EE 5提供的一种销毁回调机制。

在销毁阶段完成后,bean就已经从Spring容器中移除,相关的资源也已经被释放。

总结

总的来说,Spring bean的生命周期管理涉及到了从bean的创建、初始化到销毁的整个过程,确保了bean在使用前已经准备好,并且在不再需要时能够被正确地清理

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

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

相关文章

阿里云个人建站笔记

导航 一、购买ECS服务器二、配置mysql(一)安装Mysql步骤一:安装mysql步骤二:配置MySQL步骤三:远程访问MySQL数据库 (二)给实例配置安全组策略(三)设置防火墙 一、购买ECS…

.ma1x0勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者: 数据安全问题备受关注。而勒索病毒是其中一种最为恶劣的威胁之一。其中,.ma1x0勒索病毒备受人们担忧,因其可将用户的数据文件加密,并要求支付赎金以解密文件。本文将介绍.ma1x0勒索病毒的特征、预防方法以及如何恢复…

C# 使用Newtonsoft.Json来读取JOSN数组

怎么在C#工程中安装Newtonsoft在这里就不提了,随便搜一下就有教程反正也是用NuGet包管理器安装。这里记录一下怎么读取JSON节点。 假如有如下JSON: { "春哥": "纯爷们", "data": { "chun": 5…

transformer-Attention is All You Need(二)

transformer中的解码器 解码器层 每个解码器层根据给定的输入向目标方向进行特征提取,即完成解码过程 transformer的解码器也是一个自回归模型,根据编码器的结果以及上一次预测的结果,对下一次可能出现的值进行特征表示。它也是由N层完全相同…

循环队列|超详细|数据结构学习讲解与笔记

队列元素先进先出队列只允许在线性表的一端进行操作,是一种操作受限的线性表 队列的基本操作 InItQueue(&Q)初始化队列,构造一个空队列 QEmptyQueue(Q)队列判空FullQueue(Q)队列判满EnQueue(&Q , x)入队操作DeQueue(&Q , &x)出队操作G…

Kafka的介绍

文章目录 一、介绍二、消息队列通信的模式三、特性四、使用场景五、核心概念 一、介绍 kafka是一个分布式的发布订阅消息系统基于Zookeeper协调最初由Linkedin公司开发,于2010年贡献给了Apache基金会并成为顶级开源项目Kafka的核心是由Scala语言编写,Ka…

SpringBoot中导出excel文件

依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency> 代码实现细节 package com.lyh.mp.utils;import com.lyh.mp.entity.User; import org.apache.poi…

OpenAI新爆款Sora,大佬们怎么看?

OpenAI新爆款Sora的热度持续发酵&#xff0c;在科技圈的刷屏阵仗都快赶上正月初五迎财神了。 智东西2月17日报道&#xff0c;这两天&#xff0c;OpenAI首款文生视频大模型Sora以黑马之姿占据AI领域话题中心&#xff0c;马斯克、杨立昆、贾扬清、Jim Fan、谢赛宁、周鸿祎、李志…

【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

Spring Cloud Zuul:API 网关

1. 理解 API 网关 API网关在现代微服务架构中扮演着至关重要的角色。它充当着服务的入口&#xff0c;负责处理外部请求、路由流量、安全认证、监控日志等功能。本节将深入探讨API网关的定义、作用及其在Spring Cloud中的具体实现Spring Cloud Zuul。 1.1 什么是 API 网关 AP…

数据结构-最短路径(Dijkstra算法与Floyd算法)

介绍 对于网图来说&#xff0c;最短路径是指两顶点之间经过的边上权值之和最少的路径&#xff0c;其路径上第一个点记为源点&#xff0c;最后一个为终点。 计算最短路径有两个经典算法&#xff0c;即迪杰斯特拉&#xff08;Dijkstra&#xff09;算法与弗洛伊德&#xff08;Fl…

Class<T> clazz是什么意思

在Java中&#xff0c;Class 是一个泛型类型&#xff0c;它代表一个类对象。T 是一个类型参数&#xff0c;表示这个类对象所代表的具体的类类型。Class 是Java中所有类型元信息的类&#xff0c;包括基本类型、数组、类类型、接口、枚举和注解类型等。 Class 中的 T 允许你指定这…

unity学习(20)——客户端与服务器合力完成注册功能(2)调试注册逻辑

接着上一节的问题&#xff0c;想办法升级成具备数据库功能的服务器&#xff0c;这个是必须的。 至少在初始化要学会把文件转换为session&#xff0c;新知识&#xff0c;有挑战的。 现在是从LoginHandler.cs跳到了AccountBiz.cs的create&#xff0c;跳度还是很大的。 create函…

JS 中的数据代理

所谓数据代理&#xff08;也叫数据劫持&#xff09;&#xff0c;指的是在访问或者修改对象的某个属性时&#xff0c;通过一段代码拦截这个行为&#xff0c;进行额外的操作或者修改返回结果。比较典型的是 Object.defineProperty() 和 ES2015 中新增的 Proxy 对象。另外还有已经…

oauthlib,一个强大的 Python 身份校验库!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 什么是 OAuthLib&#xff1f; 安装 OAuthLib OAuthLib 的主要功能 OAuthLib 的用法 实现…

kafka安装配置(docker)

Kafka对于zookeeper是强依赖&#xff0c;保存kafka相关的节点数据&#xff0c;所以安装Kafka之前必须先安装zookeeper Docker安装zookeeper 下载镜像&#xff1a; docker pull zookeeper:3.4.14 创建容器 docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14 D…

文案馆头像壁纸微信小程序源码【支持流量主】

文案馆头像壁纸微信小程序源码【支持流量主】 源码介绍&#xff1a;文案馆头像壁纸微信小程序源码是一款可以获取套图、头像、壁纸的小程序。小程序源码内置流量主功能 需求环境&#xff1a;微信小程序phpmysql 下载地址&#xff1a; https://www.changyouzuhao.cn/13453.ht…

【C语言】长篇详解,字符系列篇2-----受长度限制的字符串函数,字符串函数的使用和模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本期系列为【【C语言】长篇详解&#xff0c;字符系列篇2-----“混杂”的字符串函数&#xff0c;字符串函数的使用和模拟实现【图文详解】&#xff0c;图文讲解各种字符串函数&#xff0c;带大家更深刻理解C语言中各种字符串函数的应用&#x…

即时设计是什么?

在过去的两年里&#xff0c;由于疫情的推动以及科学技术的不断进步&#xff0c;国内外协同办公室发展迅速。在市场的推动下&#xff0c;市场上出现了越来越多的协同办公软件&#xff0c;使工作场所的工作更加高效。 在设计领域&#xff0c;具有协同功能的软件市场似乎仍处于空…

记一个大坑: 树莓派上docker运行motioneye找不到摄像头

当在树莓派上执行这段命令后&#xff0c;将创建montioneye容器 docker run --name"motioneye" \-p 8765:8765 \--hostname"motioneye" \-v /etc/localtime:/etc/localtime:ro \-v /etc/motioneye:/etc/motioneye \-v /var/lib/motioneye:/var/lib/motione…