Spring中 Bean生命周期总结

Bean生命周期从创建到销毁经历多个阶段,以下是这一过程的主要步骤:

1. 实例化Bean

首先,Spring容器通过构造器(或者在某些情况下是通过工厂方法)创建Bean的实例。

Bean的实例化主要可以通过以下三种方式进行:

  • 构造器实例化:这是最常见的实例化Bean的方式。Spring通过调用Bean的构造器来创建Bean的实例。这要求Bean有一个可访问的构造器(无参或有参)。对于有参数的构造器,参数值通常是通过Spring配置文件提供,或者通过注解来自动装配。

  • 静态工厂方法实例化:这种方式下,Bean是通过调用一个静态方法来实例化的。这个静态方法会返回Bean的实例。这适用于那些不想暴露构造器给外部的场景,或者实例化过程中需要进行复杂操作。

  • 实例工厂方法实例化:与静态工厂方法相比,实例工厂方法不是静态的。首先需要创建工厂的一个实例,然后调用该实例的非静态方法来创建Bean。

在实例化阶段,Spring容器仅仅是创建了Bean的实例,此时Bean的依赖还没有被注入。依赖注入发生在实例化之后,这确保了Bean在使用前已经被正确配置。

2. 设置Bean属性

Spring容器会利用依赖注入,通过反射机制设置Bean的属性。

3. 处理Aware接口

如果Bean实现了Aware接口(如BeanNameAware, BeanFactoryAware, ApplicationContextAware等),Spring容器将会调用它们相应的方法,传入当前Bean的ID、BeanFactory和ApplicationContext等。

4. BeanPostProcessor前置处理

在初始化方法被调用前,BeanPostProcessor接口的postProcessBeforeInitialization方法将会被调用,为Bean提供进一步的处理能力。

5. 初始化Bean

如果Bean实现了InitializingBean接口,其afterPropertiesSet方法将会被调用。另外,如果Bean在配置文件中定义了init-method,指定的初始化方法也会被调用。

6. BeanPostProcessor后置处理

一旦Bean初始化完成(即init-methodafterPropertiesSet方法执行后),BeanPostProcessor接口的postProcessAfterInitialization方法将会被调用,这为Bean提供了另一次后处理的机会。

7. Bean准备就绪

此时,Bean已经准备好被应用使用了,它将在容器内部留存,直到被应用程序显式调用或通过容器的依赖注入功能注入到其他Bean中。

8. 销毁Bean

当容器关闭时,如果Bean实现了DisposableBean接口,其destroy方法将会被调用。同样,如果Bean在配置文件中定义了destroy-method,指定的销毁方法也会被执行。这标志着Bean生命周期的结束。

这个生命周期确保了Bean被正确地创建、配置、使用和最终销毁。通过这一过程,Spring容器能够管理Bean的完整生命周期,提供配置灵活、高度解耦的对象管理机制

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

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

相关文章

公安可视化分析指挥调度平台的构成要素

匠心接单中...8年前端开发和UI设计接单经验,完工项目1000,持续为友友们分享有价值、有见地的干货观点,有业务需求的老铁,欢迎关注发私信。 公安可视化分析指挥调度平台是一个集成了多种技术和功能的综合性平台,主要由…

面试宝典:深入分析golang 的反射(reflect)

Go 语言(Golang)是一门静态强类型、编译型的编程语言,由 Google 开发。Go 语言的反射(Reflection)是一个强大的特性,它允许程序在运行时获取类型的信息,并且能够操作这些类型。反射在 Go 语言中…

DataLoader;model_best.eval():设置模型为评估模式:

目录 DataLoader model_best.eval():设置模型为评估模式: DataLoader 您正在使用PaddlePaddle框架的DataLoader来创建一个测试数据加载器。这个加载器会从FoodDataset数据集中读取数据,并且按照指定的参数进行配置。以下是对您提供的代码片段的详细解释: pythonbatch_siz…

mysql 日期时间函数

学习了字符串函数,接着学习日期时间函数, 3,日期和时间函数 日期和时间函数主要用来处理日期和时间值,一般的日期函数除了使用DATE类型的参数外,也可以使用DATETIME或者TIMESTAMP类型的参数,但会忽略这些值…

Discuz采集发布插件

Discuz(简称DZ)是一款知名的开源论坛系统,广泛应用于各类网站社区。对于许多站长来说,保持论坛内容的更新是一项挑战,特别是在内容量庞大的情况下。为了解决这个问题,有一类特殊的插件是用于在Discuz论坛中…

康耐视visionpro-CogDistancePointLineTool工具详细说明

CogDistancePointLineTool功能说明: 测量点到线的距离 备注:在“Geometry-Measurement”选项中的所有工具都是测量尺寸或角度工具,包括测量线与线 的角度、点与线的距离、圆与圆的距离等测量工具,工具使用的方法相似。 ①.打开工具栏&#…

C++开源项目研究——gh0st远控(一)

上一节我们讲过肉机最关键的一步就是通过connect来连接指定的主控端 if (connect(m_Socket, (SOCKADDR *)&ClientAddr, sizeof(ClientAddr)) SOCKET_ERROR) return false; 其实在次之前应当是主控端先监听相应的端口,然后肉机再来连接这个端口的 在主控端…

分寝室(20分)(JAVA)

目录 题目描述 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: 输出样例 2: 题解: 题目描述 学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女…

Elment ui 动态表格与表单校验 列表数据 组件

组件做个记录&#xff0c;方便以后会用到。 效果&#xff1a; 代码 &#xff1a; <template><el-dialog title"商品详情" :visible.sync"dialogVisible" width"80%"><el-tabs v-model"activeTab"><el-tab-pane…

linux下 罗技鼠标睡眠唤醒问题的解决

sudo dmesg | grep Logitech | grep -o -P "usb.?\s" 得到3-2&#xff0c;用上面这条命令得到哪个usb口。 下面这条命令禁用罗技鼠标睡眠唤醒系统&#xff08;3-2改成你自己电脑上得到的usb口&#xff09; sudo sh -c "echo disabled > /sys/bus/usb/devic…

K8s 本地环境搭建,亲测可用

第一部分:安装k8s 1.28.2: 注意:因国内无法访问Google ,需要使用阿里云进行安装 系统准备 更新系统:确保你的Ubuntu系统是最新的。运行以下命令来更新系统: sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-upgrade -y安装必要的工具:安装curl和其他可能需…

c++按照指定的分隔符分割字符串

字符串先转化为std::istringstream类的实例,再进行分割操作。std::istringstream 是 C++ 标准库中的一个类,定义在 <sstream> 头文件中,用于从字符串中进行输入操作。它允许你像使用 std::cin 一样从字符串中提取数据,并进行解析。 主要特点: 用途:std::istringst…

正弦实时数据库(SinRTDB)的使用(8)-过滤查询

前文已经将正弦实时数据库的使用进行了介绍&#xff0c;需要了解的可以先看下面的博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

通过node 后端实现颜色窃贼 (取出某个图片的主体rgb颜色 )

1.需求 我前端轮播图的背景色 想通过每一张轮播图片的颜色作为背景色 这样的话 需要通过一张图片 取出图片的颜色 这个工作通过前端去处理 也可以通过后端去处理 前端我试了试 color-thief 的插件 但是 这个插件是基于canvas 的模式来的 我需要在小程序中使用这个插件 而且是…

E4440A安捷伦E4440A频谱分析仪

181/2461/8938产品概述&#xff1a; Agilent PSA 系列 E4440A 高性能频谱分析仪提供强大的一键式测量、多功能功能集和领先的技术&#xff0c;可满足您的项目和需求。 Agilent E4440A 频谱分析仪的其他功能和规格包括&#xff1a; 频率范围&#xff1a;3 Hz - 26.5 GHz/-0.19…

2024年中国医疗领域AI Models Overview

1. 神农(ShenNong-TCM) (2023-06-25) Code: ShenNong-TCM-LM基座模型: Chinese-Alpaca-Plus-7B数据: 以开源的中医药知识图谱为基础调用 ChatGPT 得到 1Iw的围绕中医药的指令数据 Model: Chinese-Alpaca-Plus-7BDataset: ShenNong_TCM Dataset, 中医药指令数据集 ShenNong_TCM…

汇总:五个开源的Three.js项目

Three.js 是一个基于 WebGL 的 JavaScript 库&#xff0c;它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性&#xff0c;Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…

K8S基本概念+pod生命周期+容器重启策略+Init容器和边车容器+pod探针+postStart和preStop

一 kubernetes 基础 Kubernetes是谷歌以Borg为前身&#xff0c;基于谷歌15年生产环境经验的基础上开源的一个项目&#xff0c;Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。 二 Master 节点 kube-APIServer&#xff1a;集群的控制中…

Java数据结构-双向不带头非循环链表(模拟实现LinkedList)

目录 1. 双向不带头非循环链表的介绍2. 相关功能的实现2.1 基本框架2.2 size2.3 addFirst2.4 addLast2.5 addIndex2.6 contains2.7 remove2.8 removeAllKey2.9 clear 3. 全部代码 前面我们学习了最简单的链表&#xff1a;单链表&#xff0c;今天我们学习双向不带头非循环链表&a…

分布式图床项目

一、图床架构分析 二、后台数据处理框架 秒传: 如果上传的文件已经在服务器中存在了,就不需要二次上传了,但是服务器会对这个文件的引用计数加一,这样服务器就知道这个文件是多个人持有的。先对上传的文件进行 md5 校验来判断服务器中已经存在相同的文件了(同样的文件拿到…