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

spring 使用FactoryBean注入bean

spring 使用FactoryBean注入bean

1、介绍

​ 通常是ApplicationContext,就是IOC容器,ApplicationContext是BeanFactory的实现类,是spring最核心的接口。用getBean来加载bean。BeanFactory相当于是IOC的基础类。而FactoryBean是另一个东西,可以用来手动注入类实例,但又与BeanFactoryPostProcessor等spring提供的扩展点不同,本身没有固定的触发时机。

FactoryBean 是作为普通Bean初始化,其目标对象的创建遵循 Spring 容器的标准生命周期,具体取决于作用域和调用时机。

2、 FactoryBean 核心作用

FactoryBean 是 Spring 框架中用于创建复杂对象的工厂接口,它允许开发者通过编程方式定制 Bean 的创建逻辑,相当于工厂模式:实现此接口的类不是普通的 Bean,而是一个能生产其他 Bean 的工厂。工厂本身由 Spring 容器管理生命周期(初始化、销毁)。

3、核心方法

T getObject() throws Exception

返回由工厂创建的对象实例。

Class<?> getObjectType()

返回工厂创建的对象类型

boolean isSingleton()

指示 getObject() 返回的对象是否为单例。

4、FactoryBean注入类实例

//1. 这里的接口泛型参数为要注入Bean的类型
public class MyFactoryBean implements FactoryBean<Person> {//2.重写的第一个方法返回Bean的实例@Overridepublic Person getObject() throws Exception {return new Person("123");}//3.重写的第二个方法返回Bean的类型@Overridepublic Class<?> getObjectType() {return Person.class;}//4.重写的第三个方法返回一个boolean值,决定该Bean的类型是单例还是多实例。这里返回true,为单例。@Overridepublic boolean isSingleton() {return true;}
}
public class Person {private String name;public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
@Configuration
public class FactoryBeanConfig {/*** 把MyFactoryBean类的Bean注入容器,即实现了把Person类Bean注入容器。* @return*/@Beanpublic MyFactoryBean PersonBean(){//这里的方法名称是Person类Bean的IDreturn new MyFactoryBean();}
}

测试代码

ApplicationContext applicationContext = SpringApplication.run(BasicApplication.class, args);// 测试通过继承factorybean方式注入IOC容器
Person personBean = (Person)applicationContext.getBean("PersonBean");
System.out.println(personBean.getName());

5、应用场景

1、需特殊初始化的组件的对象

FactoryBean 适合需要复用创建逻辑的场景。如mybatis组件的SqlSessionFactoryBean类

相关文章:

  • 《算法精解:C语言描述》note-2 链表
  • Langchain4j基于ElasticSearch的向量数据库配置后,启动报错
  • 【TF-BERT】基于张量的融合BERT多模态情感分析
  • 快速弄懂POM设计模式
  • Netlink在SONiC中的应用
  • 线程间通信--线程间顺序控制
  • Flask + SQLite 简单案例
  • 函数栈帧的创建和销毁
  • docker部署Open WebUI下载速度慢解决方法
  • Linux ACPI - ACPI系统描述表架构(2)
  • Debezium Binlog解析与事件转换流程详解
  • Oracle OCP认证考试考点详解083系列06
  • MCP智能体多Agent协作系统设计(Multi-Agent Cooperation)
  • 冯诺依曼结构与哈佛架构深度解析
  • 今天python练习题
  • TensorFlow深度学习实战——基于循环神经网络的词性标注模型
  • TS 元组
  • 深入探索 Java 区块链技术:从核心原理到企业级实践
  • 8.1 Python+Docker+企业微信集成实战:自动化报告生成与CI/CD部署全攻略
  • jetson orin nano super AI模型部署之路(八)tensorrt C++ api介绍
  • 普京称俄中关系对维护世界稳定具有战略意义
  • 《开始推理吧3》:演员没包袱,推理更共情
  • 三亚再回应游客骑摩托艇出海遇暴雨:俱乐部未配备足额向导人员,停业整改
  • 月薪3万文科友好,“AI训练师”真有那么赚?
  • 国内锂矿“双雄”开局业绩PK:从巨亏中崛起,或深陷泥淖谋求多元转型
  • 2025财政观察①长三角罚没收入增速放缓,24城仍在上涨