Spring中 BeanFactory和FactoryBean分别是什么?

Spring 中 BeanFactory 是什么?

BeanFactory其实就是IoC的底层容器,它本身只是一个接口,顾名思义Bean工厂,定义了Spring的基本功能框架,主要功能就是

  • 负责从配置源中读取 Bean 的定义,并创建、管理这些 Bean 的生命周期

  • 然后是延迟初始化,它只会在 Bean 首次请求时才会实例化该 Bean,而不是在容器启动时就立即创建所有的Bean

Spring 中的 FactoryBean 是什么?

FactoryBean是 Spring 提供的一个特殊接口,允许开发者通过自定义的逻辑创建Bean 实例。它提供了更加灵活的初始化定制功能

FactoryBean 接口有几个主要的方法

  • getObject(): 返回此工厂创建的对象的实例。该返回值会被存储到IoC容器,解决循环依赖的第三级缓存就是工厂bean

  • isSingleton(): 判断此 FactoryBean 是否返回单例

  • getObjectType(): 返回 getObject() 方法返回的对象类型

假设你依赖一个第三方的类HappyMachine,而我们又不能修改第三方的类,并且这个对象创建比较复杂,那么你就可以创建一个 bean 来封装它:

// 实现FactoryBean接口时需要指定泛型
// 泛型类型就是当前工厂要生产的对象的类型
public class HappyFactoryBean implements FactoryBean<HappyMachine> {private String machineName;public String getMachineName() {          //get setreturn machineName;}public void setMachineName(String machineName) {this.machineName = machineName;}@Overridepublic HappyMachine getObject() throws Exception {    //实例工厂bean,获取bean// 方法内部模拟创建、设置一个对象的复杂过程HappyMachine happyMachine = new HappyMachine();happyMachine.setMachineName(this.machineName);return happyMachine;   //返回对象}@Overridepublic Class<?> getObjectType() {// 返回要生产的对象的类型return HappyMachine.class;}
}

这样,我们getBean("A”)会得到 A FactoryBean#getObject 的结果,如果单纯只想要 A的FactoryBean那么加个“&”即可,即 getBean("&A")

ApplicationContext ioc = new ClassPathXmlApplicationContext("....");    
HappyMachine happyMachine = ioc.getBean("happyMachine");         //返回的是getObject方法返回的对象                  
// &happyMachine7 这是一种固定的约束       
Object bean = iocContainer.getBean("&happyMachine");    //如果想要获取FactoryBean对象, 直接在id前添加&符号即可! 

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

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

相关文章

langchain从入门到精通(三十二)——RAG优化策略(八)自查询检索器实现动态数据过滤

1. 查询构建与自查询检索器 在 RAG 应用开发中&#xff0c;检索外部数据时&#xff0c;前面的优化案例中&#xff0c;无论是生成的 子查询、问题分解、生成假设性文档&#xff0c;最后在执行检索的时候使用的都是固定的筛选条件&#xff08;没有附加过滤的相似性搜索&#xff…

面向安全产品测试的静态混淆型 Shellcode Loader 设计与对抗分析

github 地址&#xff1a;https://github.com/LilDean17/ShellcodeLoader2025 一、项目背景 近年来&#xff0c;随着 C2 框架广泛应用于安全对抗模拟&#xff0c;各大安全厂商也不断提升其检测能力&#xff0c;那么安全厂商自研的安全软件&#xff0c;是否能有效防御此类威胁&…

深度强化学习DRL——策略学习

一、策略网络 策略函数 π \pi π的输入是状态 s s s和动作 a a a&#xff0c;输出是一个介于0和1之间的概率值&#xff0c;用神经网络 π ( a ∣ s ; θ ) \pi(a \mid s; \boldsymbol{\theta}) π(a∣s;θ)近似策略函数 π ( a ∣ s ) \pi(a\mid s) π(a∣s)&#xff0c; θ …

ISP Pipeline(5): Auto White Balance Gain Control (AWB) 自动白平衡

G_gain 1.0 # 常作为参考通道 R_gain G_avg / R_avg B_gain G_avg / B_avgAuto White Balance Gain Control&#xff08;AWB&#xff09;自动调整图像中红色、绿色、蓝色通道的增益&#xff0c;使图像中灰白区域的颜色看起来为“中性白”或“灰白”&#xff0c;从而矫正因光…

Python中钩子函数的实现方式

在Python中&#xff0c;钩子函数(Hook)是一种允许你在程序执行的特定点插入自定义代码的技术。它本质上是一种回调机制&#xff0c;当特定事件发生时自动调用预先注册的函数。 Python中钩子函数的实现方式 Python中实现钩子主要有以下几种方式&#xff1a; ​回调函数​&…

【RTSP从零实践】3、实现最简单的传输H264的RTSP服务器

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

零开始git使用教程-传html文件

1. 准备工作 (1) 确保你已经安装&#xff1a; Visual Studio (VS)&#xff08;任何版本&#xff0c;社区版也行&#xff09; Git&#xff08;去官网 git-scm.com 下载安装&#xff09; (2) 注册 Gitee/GitHub 账号 国内推荐 Gitee&#xff08;码云&#xff09;&#xff1a;…

CPT204-Advanced OO Programming: Lists, Stacks, Queues, and Priority Queues

目录 1.Java 集合框架层次结构Java Collection Framework hierarchy 1.1Java 集合框架描述&#xff1a; 1.2数据结构Data structures 1.3 Java 集合框架支持两种类型的容器&#xff08;数据结构&#xff09;&#xff1a; 1.4 Java 集合框架的设计 2.Collection 2.1 Coll…

【网络安全】Mysql注入中锁机制

前言 在sql注入的延时注入中&#xff0c;常见的函数有sleep()直接延时、BENCHMARK()通过让数据库进行大量的计算而达到延时的效果、笛卡尔积、正则匹配等&#xff0c;但还有一个常常被忽略的函数&#xff0c;也就是Mysql中的锁机制。虽然早些年就已经出现过相关的技术文章&…

博途多重背景、参数实例

1&#xff1a;我们在博途中先新建一个工程&#xff0c;并且建立一个FB块名字为motor_fb&#xff0c;同样建立一个FC块名字为MOTOR_FC&#xff0c;里面写上我们电机程序里常用的逻辑控制。二者程序内容相同。下面是motor_fb块的程序截图: 2:我们再新建一个FB块&#xff0c;名字为…

运维的利器–监控–zabbix–第三步:配置zabbix–中间件–Tomcat–步骤+验证

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大学MBA在读&#xff0c;也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &…

大模型在重症哮喘手术全流程风险预测与治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目标与方法 1.3 研究创新点 二、重症哮喘概述 2.1 定义与发病机制 2.2 分类与临床表现 2.3 诊断标准与方法 三、大模型技术原理与应用现状 3.1 大模型的基本原理 3.2 在医疗领域的应用案例分析 3.3 适用于重症哮喘预测的…

Webpack的插件机制Tapable

Tapable 是一个轻量级的库&#xff0c;用于创建和管理插件钩子&#xff08;hooks&#xff09;&#xff0c;它在 Webpack 中广泛应用&#xff0c;用于实现插件系统。Tapable 提供了一种机制&#xff0c;允许插件在特定的生命周期阶段插入自定义逻辑&#xff0c;从而扩展应用程序…

FRONT归因-两阶段训练流程

FRONT, Fine-Grained Grounded Citations归因 FRONT归因&#xff0c;首先从检索到的源文档中选择支持性引用&#xff0c;然后基于这些引用指导生成过程&#xff0c;确保生成回答有据可依&#xff0c;引用准确无误。 FRONT的特色在于两阶段归因训练&#xff0c;要点如下: 阶…

单端转差分放大器AD8138

根据 AD8138 的数据手册特性及参数&#xff0c;可以实现单端 5Vpp&#xff08;偏置 0V&#xff09;正弦波转差分 5Vpp&#xff08;共模 2.5V&#xff09;的功能&#xff0c;但需注意以下细节&#xff1a; 1. 信号幅度匹配性 输入信号&#xff1a;单端 5Vpp&#xff08;峰峰值…

用R包mice进行多重插补

利用R包mice实现的链式方程多重插补方法来插补缺失的数据。 所有多重插补方法都遵循三个步骤 插补——与单次插补类似&#xff0c;对缺失值进行插补。但是&#xff0c;插补值会从分布中提取m次&#xff0c;而不是仅提取一次。此步骤结束时&#xff0c;应该有m 个完整的数据集…

【专题】网络攻防技术期末复习资料

网络攻防技术期末复习资料 链接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148996272?sharetypeblogdetail&sharerId148996272&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 网络安全威胁的成因。 分类&#xff1a…

地震灾害的模拟

为确保地震灾害模拟的准确性和高效性&#xff0c;涉及的系统需要处理复杂的物理模型、数据输入和多层次的模拟过程。在技术设计方案中&#xff0c;我们将涵盖以下几个方面&#xff1a; 背景&#xff1a;描述该模拟系统的目的与应用场景。需求&#xff1a;列出系统的功能需求&a…

9.9 《1/10成本实现GPT-3.5级表现!ChatGLM3-6B QLoRA微调实战:4bit量化+低秩适配全解析》

1/10成本实现GPT-3.5级表现!ChatGLM3-6B QLoRA微调实战:4bit量化+低秩适配全解析 ChatGLM3-6B 微调入门实战:QLoRA 量化低秩适配技术 ▲ ChatGLM3-6B采用GLM架构改进版,支持32K上下文长度和代码生成能力 一、QLoRA 技术原理精要 QLoRA(Quantized Low-Rank Adaptation)…

【Python基础】11 Python深度学习生态系统全景解析:从基础框架到专业应用的技术深度剖析(超长版,附多个代码及结果)

引言:Python在深度学习领域的统治地位 在人工智能浪潮席卷全球的今天,Python已经成为深度学习领域当之无愧的王者语言。这不仅仅是因为Python语法简洁易学,更重要的是围绕Python构建的深度学习生态系统的完整性和强大性。从Google的TensorFlow到Facebook的PyTorch,从科学计…