【面试题】Spring源码中的getBean()为什么需要对““进行处理?

个人主页:金鳞踏雨

个人简介:大家好,我是金鳞,一个初出茅庐的Java小白

目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作

我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~

案例

我们先自定义一个 HarmonyFactoryBean ,让它实现 FactoryBean 接口

@Component
public class HarmonyFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {return new UserService();}@Overridepublic Class<?> getObjectType() {return UserService.class;}
}
@ComponentScan("com.harmony")
public class AppConfig {
}
public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(context.getBean("&harmonyFactoryBean"));System.out.println(context.getBean("harmonyFactoryBean"));}
}

运行结果

com.zhouyu.service.HarmonyFactoryBean@6b419da
com.zhouyu.service.UserService@636be97c 

在getBean()的时候里面加 "&" 与不加有什么区别?为什么需要这样子设计?

Spring中的getBean()方法是用于获取Bean实例的主要入口之一。当getBean()方法中包含&符号时,它的行为会稍有不同。这是因为Spring支持两种类型的Bean:

  1. 普通Bean:这是常规的Java对象,由Spring容器实例化和管理。当调用getBean()方法时,Spring会返回Bean对象的实例。

  2. FactoryBean:这是实现了FactoryBean接口的特殊类型Bean。FactoryBean允许你定义一个工厂,它负责创建和返回其他Bean。这种情况下,getBean()方法返回的是FactoryBean的实例,而不是由FactoryBean创建的Bean实例。

当你在getBean()方法中使用&符号时,Spring会告诉容器不要返回FactoryBean实例,而是返回FactoryBean本身。这允许你访问FactoryBean的配置和属性,而不是获取由其创建的Bean。这是有用的,因为有时你可能需要直接访问FactoryBean的属性或方法,而不是获取它创建的Bean。

例如,如果你有一个DataSourceFactoryBean,你可以通过getBean("&dataSourceFactoryBean")来获取DataSource的工厂实例,然后再调用工厂实例的方法来访问配置和属性。而如果你调用getBean("dataSourceFactoryBean"),它将返回DataSource实例,而不是工厂本身。

总之,&符号告诉Spring容器返回FactoryBean实例,而不是FactoryBean创建的Bean实例,这是为了提供更灵活的控制和访问方式。如果不使用&符号,getBean()方法默认返回FactoryBean创建的Bean实例。

文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~

希望能和大佬们一起努力,诸君顶峰相见

再次感谢各位小伙伴儿们的支持!!!

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

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

相关文章

如何基于先进视频技术,构建互联网视频监控安全管理平台解决方案

一、建设思路 依托互联网&#xff0c;建设一朵云&#xff0c;实现各类二三类视频资源统一接入&#xff0c;实现天网最后100米、10米、1米的全域覆盖。 依托人工智能与互联网技术&#xff0c;拓展视频资源在政府、社会面等多领域的全面应用&#xff1b;建设与运营模式并存&…

Insight H2 database 数据查询核心原理

本文目标是&#xff1a;了解查询的核心原理&#xff0c;对比 SQL 查询优化技巧在 h2database 中的落地实现。 前提&#xff1a;为了贴近实际实际&#xff0c;本文 Code Insight 基于 BTree 存储引擎。 数据查询核心原理 数据库实现查询的原理&#xff1a;遍历表/索引&#xff0…

软件测试工具有什么作用?有哪些好用的测试工具推荐?

软件测试工具是现代软件测试中不可或缺的重要组成部分&#xff0c;指的是一系列在软件开发过程中使用的工具&#xff0c;用于帮助测试人员进行测试活动&#xff0c;提高测试效率&#xff0c;减少测试成本。选择并使用合适的软件测试工具&#xff0c;可提高软件质量和效率。 一…

WebRTC 系列(四、多人通话,H5、Android、iOS)

WebRTC 系列&#xff08;三、点对点通话&#xff0c;H5、Android、iOS&#xff09; 上一篇博客中&#xff0c;我们已经实现了点对点通话&#xff0c;即一对一通话&#xff0c;这一次就接着实现多人通话。多人通话的实现方式呢也有好几种方案&#xff0c;这里我简单介绍两种方案…

【Ubuntu】Ubuntu18.04终端卡顿问题

博主您好&#xff0c;我也遇到了类似的问题&#xff0c;但我找到了问题的原因&#xff1a; 在gnome-terminal中&#xff0c;按tab补全是默认开启了“咚咚咚”音效的&#xff0c;在gnome-terminal里把音效关掉就好了&#xff0c;主要是因为按tab时&#xff0c;NVIDIA的视频信号和…

应用在SMPS中的GaN/氮化镓

开关模式电源&#xff08;Switch Mode Power Supply&#xff0c;简称SMPS&#xff09;&#xff0c;又称交换式电源、开关变换器&#xff0c;是一种高频化电能转换装置&#xff0c;是电源供应器的一种。其功能是将一个位准的电压&#xff0c;透过不同形式的架构转换为用户端所需…

uniapp 跳转到指定位置

this.$router.push({name: Demo,params: {id: 123} })这样就实现了页面的跳转&#xff0c;并且将参数id传递给了Demo组件。 如果需要跳转到当前页面的不同位置&#xff0c;我们可以使用锚点来实现。锚点是一个HTML元素的标识符&#xff0c;可以用于定位和跳转到该元素。例如&a…

【2023】M1/M2 Mac 导入Flac音频到Pr的终极解决方案

介绍 原作者链接&#xff1a;https://github.com/fnordware/AdobeOgg 很早之前就发现了这个插件&#xff0c;超级好用&#xff0c;在windows上完全没有问题&#xff0c;可惜移植到mac就不行了&#xff08;然后我给作者发了一个Issue&#xff0c;后来就有大佬把m1的编译出来了&…

②. GPT错误:图片尺寸写入excel权限错误

꧂问题最初 ꧁ input输入图片路径 print图片尺寸 大小 长宽高 有颜色占比>0.001的按照大小排序将打印信息存储excel表格文件名 表格路径 图片大小 尺寸 颜色类型 占比信息input输入的是文件就处理文件 是文件夹&#x1f4c1;就处理文件。路径下的图片 1. 是处理本路径图片 …

狄拉克函数及其性质

狄拉克函数及其性质 狄拉克函数 近似处理 逼近近似 积分近似 狄拉克函数的性质 狄拉克函数的Hermite展开

构建图像金字塔:探索 OpenCV 的尺度变换技术

构建图像金字塔&#xff1a;探索 OpenCV 的尺度变换技术 引言什么是图像金字塔&#xff1f;为什么需要图像金字塔&#xff1f;构建高斯金字塔构建拉普拉斯金字塔图像金字塔的应用示例&#xff1a;在不同尺度下检测图像中的边缘 结论 引言 在计算机视觉领域&#xff0c;图像金字…

ROS-PX4仿真笔记_1

offbord模式测试 rosrun offboard_pkg position stablelize模式 lqr控制器实验 roslaunch px4 fast_test.launch 无人机起飞1.5-2m sh mybot_gazebo.sh先点击mode&#xff0c;再点击cmd&#xff0c;才能打开offbord模式 minijerk实验 roslaunch px4 fast_test.launch sh …

电子科大软件系统架构设计——系统架构设计

文章目录 系统架构设计系统设计概述系统设计定义系统设计过程系统设计活动系统设计基本方法系统设计原则系统设计方法分类面向对象系统分析与设计建模过程 系统架构基础系统架构定义系统架构设计定义系统架构作用系统架构类型系统总体架构系统拓扑架构系统拓扑架构类型系统拓扑…

读书笔记:多Transformer的双向编码器表示法(Bert)-4

多Transformer的双向编码器表示法 Bidirectional Encoder Representations from Transformers&#xff0c;即Bert&#xff1b; 第二部分 探索BERT变体 从本章开始的诸多内容&#xff0c;以理解为目标&#xff0c;着重关注对音频相关的支持&#xff08;如果有的话&#xff09;…

C语言--sizeof()

sizeof() 是C语言中的一个操作符&#xff0c;用于获取数据类型或对象的大小&#xff0c;通常以字节为单位。它返回一个整数值&#xff0c;表示所查询对象或数据类型占用的内存字节数。sizeof() 可以用于不同的用途&#xff1a; 获取数据类型的大小&#xff1a;您可以使用 size…

Docker基础操作容器

启动容器有两种方式&#xff0c;一种是基于镜像新建一个容器并启动&#xff0c;另外一个是将在终止状态&#xff08;exited&#xff09;的容器重新启动。 因为 Docker 的容器实在太轻量级了&#xff0c;很多时候用户都是随时删除和新创建容器。 新建并启动 所需要的命令主要…

使用tailwindcss来构建以及引入外部组件

使用tailwindcss来构建以及引入外部组件 使用tailwindcss来构建以及引入外部组件 前言构建组件 核心思想可行方案不可行方案 可行方案详解 custom css selector Functions & Directivesadd prefixadd scoped不打包 构建demo链接相关issues 前言 我们在日常的开发中&am…

日志的详细说明

在Spring应用程序中&#xff0c;日志是指记录应用程序运行时信息的一种机制&#xff0c;通常以文本形式保存在文件中或通过其他适当的渠道显示。日志是开发和维护应用程序时非常重要的工具&#xff0c;用于记录应用程序的状态、错误、调试信息和性能数据&#xff0c;以便开发人…

1、AM64xx的SDK重新编译lib文件

当需要修改AM64XX的SDK提供的源文件时&#xff0c;如果要在自己的工程使用&#xff0c;需要重新编译出lib&#xff0c;下面是编译lib的具体方法&#xff1a; 因为没有ccs编译出lib的工程&#xff0c;所以需要再命令行模式下生成lib文件 1、配置好gmake环境 如果安装了ccs&am…

隔离上网,安全上网

SDC沙盒数据防泄密系统&#xff08;安全上网&#xff0c;隔离上网&#xff09; •深信达SDC沙盒数据防泄密系统&#xff0c;是专门针对敏感数据进行防泄密保护的系统&#xff0c;根据隔离上网和安全上网的原则实现数据的代码级保护&#xff0c;不会影响工作效率&#xff0c;不…