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

Spring 中的 FactoryBean

在 Spring 中,FactoryBean本质上是 Spring 提供的一种“定制化创建 Bean 实例”的机制。平时定义的 Bean,都是由 Spring 自动调用构造方法或者工厂方法来创建的。但有些时候,我们需要更复杂的 Bean 创建逻辑,比如创建一个代理对象、动态构造配置,或者集成第三方组件。这时候就用到了FactoryBean

它是一个接口

publicinterfaceFactoryBean<T>{TgetObject()throwsException;// 返回 Bean 实例Class<?>getObjectType();// 返回 Bean 类型booleanisSingleton();// 是否单例}

当在 Spring 容器中注册了一个实现了FactoryBean接口的类,Spring 会调用它的getObject()方法来创建实际的 Bean 实例,而不是直接实例化这个FactoryBean本身。

创建一个自定义的 User 对象(可以模拟复杂构造过程)

publicclassUser{privateStringname;publicUser(Stringname){this.name=name;}// getter/setter...}

实现 FactoryBean:

@ComponentpublicclassUserFactoryBeanimplementsFactoryBean<User>{@OverridepublicUsergetObject(){returnnewUser("FactoryBean 创建的用户");}@OverridepublicClass<?>getObjectType(){returnUser.class;}@OverridepublicbooleanisSingleton(){returntrue;// 返回 true 表示单例}}

获取 Bean:

@AutowiredprivateUseruser;// 注意:注入的是 getObject() 返回的 User

获取UserFactoryBean本身

@AutowiredprivateUserFactoryBeanuserFactoryBean;@Autowired@Qualifier("&userFactoryBean")privateObjectrawFactoryBean;
  • 使用&前缀可以获取到FactoryBean本身,而不是它创建的对象!

FactoryBean是 Spring 中一个用于“按需定制 Bean 创建过程”的高级接口,本质上是“Bean 的工厂”。

http://www.jsqmd.com/news/464672/

相关文章:

  • AthenaX开发者指南:从源码构建到自定义连接器开发
  • 【后端】Docker一本通
  • 多控智能小车:嵌入式模块化设计与多模通信架构
  • 从源码到实践:sd-dynamic-thresholding核心算法Dynthresh类深度剖析
  • Awesome React Hooks生态系统:最值得推荐的15个第三方钩子库
  • ZCU106开发板上Aurora 64B66B IP核的硬件调试实战(含SMA接线指南)
  • Vue 中 data 为什么是函数而不是对象?
  • Tooll 3 开源项目推荐:实时运动图形创作的革命性工具
  • MuJoCo Playground 项目复现与问题记录
  • ntc-templates高级技巧:提升网络自动化效率的7个方法
  • 从PTA最佳调度问题看回溯法的实战应用:避坑指南与性能优化
  • T536 4G模块适配
  • Fider 开源项目推荐:构建现代化用户反馈平台的最佳实践
  • 知网和维普AIGC检测哪个更严?同一篇论文双平台实测数据
  • FreeFileSync批量同步教程:轻松管理多文件夹同步任务
  • reid 行人跟踪源代码
  • Rust 的 mod(模块) 说明
  • Alibaba Cloud 实现大文件上传
  • 把 SAP 系统真正跑在 IPv6 上:从实例开关到 AS Java、DNS 与双栈治理的完整实践
  • IDEA使用指南GUIDE
  • 消息队列原理篇
  • PyCharm连接英伟达4090D GPU服务器实战(本文提供项目代码、英伟达4090D显卡服务器完整环境)
  • SpeedAI、笔灵AI、嘎嘎降AI三款热门工具实测,谁才是性价比之王
  • 10个Kinesalite常见问题解决方案:从安装到数据处理全指南
  • 【Python】算法笔记
  • 率零和去AIGC哪个好用?两款平价降AI工具深度对比
  • 终极指南:如何使用 ncollide 构建 Rust 2D/3D 碰撞检测系统
  • Unity IDE(代码调试编辑器,支持Lua断点)选择Visual Studio还是Rider?(带使用教程详解)
  • Kafka、Flink安装,简单使用
  • 微弱电流信号检测中TIA原理与T型电阻原理图相比,在检测性能、适用场景等有哪些具体区别