Spring Bean 管理学习

  Spring 框架的核心之一是 IOC(控制反转)容器,Bean 的管理是其中的重要功能。本文将从 Bean 的获取、作用域和第三方 Bean 的管理三个方面进行学习和总结。

1. 获取 Bean

  在 Spring 项目启动时,IoC 容器会将所有的 Bean 创建好并托管。如果需要获取容器中的 Bean,可以通过以下方式:

1.1 自动注入方式
@Autowired
private ApplicationContext applicationContext;

  使用 @Autowired 注解将 Spring 容器注入到当前类中,通过 ApplicationContext 提供的接口获取 Bean。

1.2 主动获取方式

Spring 提供了 ApplicationContext 接口的 getBean 方法,支持以下三种调用方式:

  1. 根据 Bean 名称获取:

Object bean = applicationContext.getBean("beanName");
  1. 根据类型获取:

MyBean bean = applicationContext.getBean(MyBean.class);
  1. 根据名称和类型获取:

MyBean bean = applicationContext.getBean("beanName", MyBean.class);

2. Bean 的作用域

Spring 支持五种 Bean 的作用域,每种作用域决定了 Bean 在容器中的生命周期和实例数量。

2.1 配置 Bean 作用域

通过 @Scope 注解配置 Bean 的作用域:

@Scope("prototype")
@RestController
public class DeptController {
    // Controller 逻辑
}
2.2 注意事项
  1. 单例 Bean

    • 默认单例 Bean 会在容器启动时被创建。

    • 可以使用 @Lazy 注解延迟初始化(首次使用时才创建)。

  2. 原型 Bean

    • 每次获取都会创建新的实例。

    • 适用于无状态的 Bean 或短生命周期的 Bean。

  3. 生产开发中:绝大部分 Bean 默认单例即可,不需要显式配置作用域。

3. 第三方 Bean 的管理

  如果需要管理的 Bean 对象来自于第三方库(非自定义 Bean),无法通过 @Component 等注解直接声明 Bean,这时需要使用 @Bean 注解。

3.1 使用 @Bean 注解管理第三方 Bean
@Configuration
public class CommonConfig {
    @Bean
    public SAXReader saxReader() {
        return new SAXReader();
    }
}
  • 通过 @Configuration 注解声明配置类。

  • 在配置类中定义方法,并使用 @Bean 注解将方法返回的对象注册为 Spring 容器的 Bean

3.2 注意事项

  1. 如果需要为 Bean 指定名称,可以通过 @Bean(name = "beanName") 明确声明,否则默认名称为方法名。

  2. 如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。

4. 总结

Spring 的 Bean 管理提供了极大的灵活性,通过 IOC容器,我们可以轻松实现 Bean 的声明与生命周期控制。在实际开发中:

  1. 获取 Bean:推荐优先使用自动注入方式简化代码。

  2. 作用域管理:大部分场景下使用单例即可,特殊需求可根据情况选择其他作用域。

  3. 第三方 Bean:通过 @Bean 和配置类管理,方便统一配置与维护。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel for Finance 07 `FV PV` 函数

Excel 的 FV 函数用于计算一笔投资在未来的价值,基于固定的利率和定期付款。这是一个金融函数,常用来分析储蓄计划、贷款、或投资的增长。 语法: FV(rate, nper, pmt, [pv], [type])参数说明: rate(必需)&…

Lecture 18

Floating Point Numbers 1. 整数的局限性: • 在计算机中,并非所有数字都能用整数形式表示。例如: • 非整数(如小数):345.0256。 • 超出整数表示范围的数: 5.375 \times 10^{25} 。 2. 浮…

【LC】19. 删除链表的倒数第 N 个结点

题目描述: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出&#xff…

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx(具有两个sheet)2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …

五.Springboot通过AOP实现API接口的签名验证

文章目录 前言一、实现原理二、签名规则三、服务端实现4.1、创建自定义注解4.2、创建切面处理类4.3、对应工具类RequestUtil 四、测试4.1 签名失败测试:4.2 签名成功测试: 四、总结 前言 对外开放的接口,需要验证请求方发送过来的数据确实是…

记录jvm进程号

日常开发中,相信大家会经常用到这么一行命令: ps -ef | grep xxx.jar | grep -v grep | awk {print $2} | xargs -r kill -9 就是杀掉xxx相关的进程,然后启动,当然也还有其他的方式可以实现类似的功能,我就不列举了&…

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器,递增的不太行,控制的不够准确,其次在大于10微秒的延时是非常准确的,小于的话,就没有那没准,但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…

简述css中z-index的作用?如何用定位使用?

z-index是一个css属性,用于控制元素的堆叠顺序, 如何使用定位用index 1、position:relative; z-index; 相对于自己来定位的,可以根据top,bottom,right,left&#xff…

被裁20240927 --- 嵌入式硬件开发 STM32篇

人很容易原谅别人的错误但很难原谅别人的正确 1. 文档、手册、指南、资源2. MCU 结构3. MCU 和 MPU 的区别4. 一些概念什么是看门狗 ?什么是 DMA ?什么是晶振 ?什么是片内外设?软件协议、硬件协议、数据协议、通讯协议、通信协议u…

被邀请出版Cursor教程书籍是什么体验?

本文目的 本次文章和大家分享一下被邀请出版书籍的经历、准备工作;准备工作大部分文字内容由Cursor完成。同时如果有后续、未来书籍真的出版,我会持续进行分享,欢迎关注我~ 事情来由 前几天我被出版社编辑联系,询问我是否可以合…

全新免押租赁系统助力商品流通高效安全

内容概要 全新免押租赁系统的推出,可以说是一场商品流通领域的小革命。想象一下,不再为押金烦恼,用户只需通过一个简单的信用评估,就能快速租到所需商品,这种体验简直令人惊喜!这个系统利用代扣支付技术&a…

upload-labs关卡记录9

还是上传一个一句话木马,提示文件类型不允许上传,随变改一改后缀名,发现就可以上传了,黑名单,这里经过尝试,常规的双写后缀,大小写,.htaccess,然后抓包,试试点…

高质量 Next.js 后台管理模板源码分享,开发者必备

高质量 Next.js后台管理模板源码分享,开发者必备 Taplox 是一个基于 Bootstrap 5 和 Next.js 构建的现代化后台管理模板和 UI 组件库。它不仅设计精美,还提供了一整套易用的工具,适合各种 Web 应用、管理系统和仪表盘项目。无论你是初学者还是…

路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度

何在路由器上设置代理服务器? 如何在路由器上设置代理服务器? 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择,特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤,使用路由器…

【Linux/踩坑】Linux中启动eclipse或HDFS因JAVA_HOME设置报错

Linux中启动eclipse或hadoop因JAVA_HOME设置报错 eclipseHadoop eclipse 错误提示: A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the follo…

可信数据空间建设及应用参考指南(V1.0)

为贯彻国家数据局《可信数据空间发展行动计划(2024-2028 年)》,促进可信数据空间持续、快速和健康发展,相关行业专家组织编写《可信数据空间建设及应用参考指南(V1.0)》(以下简称《参考指南》&a…

Hive刷分区MSCK

一、MSCK刷分区 我们平时通常是通过alter table add partition方式增加Hive的分区的,但有时候会通过HDFS put/cp命令或flink、flum程序往表目录下拷贝分区目录,如果目录多,需要执行多条alter语句,非常麻烦。Hive提供了一个"…

【学生管理系统】权限管理之用户管理

目录 6. 权限管理 6.1 环境搭建 6.1.1 数据库 6.1.2 后端环境 6.2 用户管理 6.2.1 查询所有用户(关联角色) 6.2.2 核心1:给用户授予角色 6. 权限管理 6.1 环境搭建 6.1.1 数据库 权限管理的5张表的关系 添加4张表 # 权限表&…

PTPVT 插值说明

文章目录 PTPVT 插值说明 PTPVT 插值说明PVT Hermite插值PVT 三次多项式插值PT 插值Sin轨迹测试结果PVT Hermite插值结果PVT 三次多项式插值结果PT 插值结果 用户轨迹测试结果PVT Hermite插值结果PT 插值结果 PTPVT 插值说明 PT模式: 位置-时间路径插值算法。 PVT模…

EMNLP'24 最佳论文解读 | 大语言模型的预训练数据检测:基于散度的校准方法

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 张伟超,中国科学院计算所网络数据科学与技术重点实验室三年级直博生 内容简介 近年来,大语言模型(LLMs)的…