【Spring】Bean生命周期

news2025/2/26 20:10:01

一、背景:

自动注入 UserService 对象, UserService 结构如下

在这里插入图片描述

二、创建 Bean 的整体流程:

UserService.class ------> 无参的构造方法 ------> 普通对象(无值) ------> 依赖注入 ------> 初始化前(@PostConstruct) ------> 初始化 Bean (InnitializaingBean) ------> 初始化后 (AOP)------> 代理对象 ------> 放入单例池 Map ------> Bean对象

获取 Bean 对象代码:

通过如下代码,我们可以判断 Bean 对象是否创建成功

在这里插入图片描述

三、各阶段详解

1. 依赖注入阶段:

这个阶段主要是通过反射寻找对象的那个属性上有 @Autowired 注解,伪代码如下:

在这里插入图片描述
2. Bean 如何实现单例 —— 即每次返回的都是同一个 Bean 对象

通过创建单例池实现 ,具体方式为:使用一个 Map<beanName, Bean 对象> 存储,这个 Map 的键为 Bean 对象的名字 (UserService),Map 的值为 Bean 第一次创建的 Bean对象 (new UserService()),每次获取 Bean 对象 都去这个单例池查找就可以保证每次返回的都是同一个 Bean 对象

3. 如何使得我们的 Bean 对象创建好了就带有我们需要的值,而不是创建完了再去赋值

  • 方法一: 在初始化前处理
    对每个对象,自动注入时为赋值方法加上 @PostConstruct 注解,这样的方法在自动注入时就会被执行,我们的赋值方法也可以加在这里

在这里插入图片描述

实现这一操作的伪代码:也是通过反射,扫描各个方法上的注解

在这里插入图片描述

  • 方法二: 在初始化时执行
    实现 InitializingBean 接口,重写 afterPropertiesSet 方法,将赋值操作放在这里方法里,这个方法会在对象初始化时执行。

在这里插入图片描述

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

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

相关文章

FreeCAD二次开发-基于控制台模式FC外部开发

版本 FreeCAD0.18.2+PyCharm Community 2020.3.3 演示效果 环境搭建步骤 1.先安装好FreeCAD和PyCharm 2.添加环境变量 点击确定,全部关掉。 3.测试变量是否生效(CMD打开控制台,输入python回车) 弹出如下,说明可以进入FreeCAD自带的python解释器 4.打开PyCharm新建项目 …

Windows静态库用C++代码调用C语言的旧库方法extern ”c“

静态库特点 运行不存在 静态库源码被链接到调用程序中 目标程序的归档 C语言静态库 C静态库的创建 1.创建一个静态库项目 2.添加库程序&#xff0c;源文件使用C文件 C静态库的使用 库路径设置&#xff1a;可以使用pragma关键字设置 #pragma comment&#xff08;lib,“./lib/cli…

15、Mybatis获取参数值的情况1(mapper接口方法的参数为单个字面量类型)

Mybatis获取参数值的情况1&#xff08;mapper接口方法的参数为单个字面量类型&#xff09; #{}和${}可以通过任意名称来获取 mapper接口方法的参数为单个字面量类型第一步&#xff1a; 第二步&#xff1a;#{} 结果&#xff1a; 第二步:${} 结果 第三步&#xff1a; 这种也行&…

站酷基于服务网格 ASM 的生产实践

01背景介绍Aliware站酷&#xff08;ZCOOL&#xff09;2006 年 8 月创立于北京&#xff0c;深耕设计领域多年&#xff0c;聚集了 1500 万设计师、摄影师、插画师、艺术家、创意人&#xff0c;在设计创意群体中具有一定的影响力与号召力。站酷在创立之初&#xff0c;就以“让设计…

libcurl 库的编译

因为要用到 libcurl 库的接口进行练习&#xff0c;而现在手上只有curl相关的头文件&#xff0c;那没办法只能下载源码进行编译了&#xff0c;这里记录一下编译 x86 与 hisi dv300 版本的动态库。 根据头文件 curlver.h 里的版本信息&#xff0c;我是直接下载 7.67.0 版本的源码…

领悟《信号与系统》之 LTI 系统的卷积积分及性质

LTI 系统的卷积积分及性质一、卷积积分及其性质1. 任意信号的分解2. 任意信号作用下的零状态响应3. 卷积的定义4. 卷积性质1. 代数性质2. f(t)与奇异信号的卷积 &#xff08;非常重要&#xff09;3. 卷积的微分和积分4. 卷积时移5. 常用信号的卷积公式二、总结重点笔记主要记录…

MNN--初步学习

来自阿里MNN有三个贡献点&#xff1a; 提出了预推理机制&#xff0c;在线计算推理成本和最优方案优化了kernel提出后端抽象实现混合调度MNN的架构&#xff1a; 分离线和在线两部分。离线就是很传统的模型转换、优化、压缩、量化的那一套东西&#xff0c;这里mnn转出的模型文件…

【外卖项目实战开发三】

文章目录分类管理业务开发公共字段自动填充问题分析代码实现功能完善新增分类需求分析数据模型代码开发分类信息分页查询需求分析代码开发删除分类需求分析代码开发代码完善关键代码修改分类需求分析代码实现分类管理业务开发 公共字段自动填充 问题分析 前面我们已经完成了…

A股上市公司MSCI指数和ESG评级效果(2010-2021年)

1、数据来源&#xff1a;摩根斯坦利资本国际公司(Morgan Stanley Capital International) 2、时间跨度&#xff1a;2010--2021 3、区域范围&#xff1a;A股上市公司 4、指标说明&#xff1a; ESG是英文Environmental&#xff08;环境&#xff09;、Social&#xff08;社会&…

《人月神话》(The Mythical Man-Month)6贯彻执行(Passing the Word)

《人月神话》&#xff08;The Mythical Man-Month&#xff09;Chapter 6. 贯彻执行 Passing the Word他只是坐在那里&#xff0c;嘴里说&#xff1a;"做这个&#xff01;做那个&#xff01;"当然&#xff0c;什么都不会发生&#xff0c;光说不做是没有用的。- 哈里杜…

基于主从博弈的社区综合能源系统分布式协同优化运行策略matlab/cplex程序

基于主从博弈的社区综合能源系统分布式协同优化运行策略matlab/cplex程序 随着能源市场由传统的垂直一体式结构向交互竞争型 结构转变&#xff0c;社区综合能源系统的分布式特征愈发明显&#xff0c;传统 的集中优化方法难以揭示多主体间的交互行为。该文提出一 种基于主从博弈…

(免费分享)基于ssm在线点餐

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;017领取下载链接 开发工具&#xff1a;IDEA ,Tomcat8.0&#xff0c;数据库&#xff1a;mysql5.7 /*** FileName: CategoryController** Date: 2020/9/30 17:04* Description:*/ package com.qst.goldenarches.contro…

关于环境保护html网页设计完整版-4环保垃圾分类5页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 环境保护 | 保护地球 | 校园环保 | 垃圾分类 | 绿色家园 | 等网站的设计与制作HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样…

Node.js 入门教程 14 使用 exports 从 Node.js 文件中公开功能

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程14 使用 exports 从 Node.js 文件中公开功能14 使用 exports 从 Node.js 文件中公开功能 Node.js 具有内置的模块系统。 …

Python脚本实现BJTU校园网自动登录

文章目录 1.背景介绍2.登录分析3.代码分析4.源代码1.背景介绍 BJTU的校园网连接好以后需要输入账号和密码才能正确登录,如下图所示。整个流程比较繁琐,尤其是很多服务器、工作站是无图形化的系统,大部分时间需要SSH连接,所以通过界面登录十分不方便。 所以就想了一个办法,…

(附源码)计算机毕业设计Java办公自动化管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

(附源码)计算机毕业设计Java巴州监控中心人事管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

java_ 多线程知识笔记(一)

文章目录前言:1.如何理解线程2.进程和线程的关系3.多线程编程第一种:继承Thread类第二种:实现Runnable 接口:第三种:使用Lambda表达式4.Thread 用法1.Thread常见的构造方法2.Thread的几个常见的属性5.等待一个线程6.并发和并行前言: 为什么要引入多线程编程 java引用进程的概…

【好书推荐】计算机网络:自顶向下方法(第七版)

人生的美妙之处在于迷上一样东西。人生苦短&#xff0c;少做些虚无缥缈的事。 – 刘慈欣-《三体》 推荐理由 自计算机网络诞生以来&#xff0c;经过数十年的发展&#xff0c;计算机的体系已经非常庞大&#xff0c;同时计算机网络也大大促进了人类社会的发展。无数大佬前赴后继…

【python量化】将Informer用于股价预测

写在前面Informer模型来自发表于AAAI21的一篇best paper《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》。Informer模型针对Transformer存在的一系列问题&#xff0c;如二次时间复杂度、高内存使用率以及Encoder-Decoder的结构限制&…