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

Spring 中获取 Bean 对象的三种方式

目录

1、根据名称获取Bean

2、根据Bean类型获取Bean

3、根据 Bean 名称 + Bean 类型来获取 Bean(好的解决方法)


 假设 Bean 对象是 User,并存储到 Spring 中,注册到 xml 文件中

public class User {public String sayHi(){return  "hello world";}
}

下面我将列举获取 Bean 对象的几种方法 

 下面代码中 context 为 spring (上下文)对象

 1、根据名称获取Bean

User user = (User) context.getBean("user");

这种方式获取 Bean 只需要传入名称,即注册到 xml 文件中 Bean 的 id 。

同时我们还需要做一次对象类型强转,因为只传入 id ,getBean() 方法返回的是一个 Object 类型的对象。

存在问题:当传入一个NULL时,强转 User 就会出错,报异常。

 2、根据Bean类型获取Bean

User user = context.getBean(User.class);

这种方式写法简单, 解决第一种方式传入 NULL 会报错的情况,但也存在一些问题,实际用途并不太多。

存在问题:当Spring中存在相同的对象是,使用类型来获取Bean就会报错

 3、根据 Bean 名称 + Bean 类型来获取 Bean(好的解决方法)

User user = context.getBean("user", User.class);

       这种我们需要传入两个参数,一个是id,一个是对象类,返回一个该类的对象,就避免了强转的风险(第一种问题解决)。同时,我们在 spring 中存储多个相同对象时,也不回报错(第二种问题解决)。

相关文章:

  • 十分钟上手vue!
  • Elasticsearch:Geoshape query
  • 基于YOLOv8深度学习的水稻叶片病害智能诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
  • anaconda+pytorch+pycharm安装总结
  • M1芯片MAC 安装MySQL、Nacos遇到的问题
  • VUE开发记录
  • CTFHub:web-LD_PRELOAD-WP
  • 担心信息泄露被恶意申贷,查大数据报告有用吗?
  • linux中的makefile
  • -1- Python环境安装
  • C++模版初阶
  • 如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证
  • 大数据信用报告查询费用一般要多少钱?
  • 幻兽帕鲁能在Mac上运行吗?幻兽帕鲁Palworld新手攻略
  • 【ArcGIS微课1000例】0100:ArcGIS for CAD软件下载与安装(附安装包)
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Gradle 5.0 正式版发布
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python_bomb----数据类型总结
  • React as a UI Runtime(五、列表)
  • session共享问题解决方案
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Windows Containers 大冒险: 容器网络
  • 代理模式
  • 给github项目添加CI badge
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用Swoole加速Laravel(正式环境中)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #if和#ifdef区别
  • #NOIP 2014#Day.2 T3 解方程
  • (1)(1.11) SiK Radio v2(一)
  • (1)SpringCloud 整合Python
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • ***原理与防范
  • .net MySql
  • .NET Standard 的管理策略
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .pyc文件是什么?
  • ::before和::after 常见的用法
  • [2023年]-hadoop面试真题(一)
  • [C#] 如何调用Python脚本程序
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [dfs] 图案计数
  • [JavaWeb玩耍日记]Maven的安装与使用
  • [linux][调度] 内核抢占入门 —— 高优先级线程被唤醒时会立即抢占当前线程吗 ?
  • [OLEDB] 目前还找找不到处理下面错误的办法
  • [Oracle]4--查询操作