Spring之FactoryBean详解

前言

Spring中有BeanFactory接口,也有FactoryBean接口。注意不要混淆两者。有关BeanFactory的内容,请查看博主的另一篇文章:《Spring之BeanFactory详解》

FactoryBean讲解

首先,先看其类的结构图:

1.FactoryBean也是一个由Spring容器管理的类。所以其可以通过BeanFactory的getBean方法获得。所以,FactoryBean与BeanFactory的关系就是管理与被管理的关系。

2.FactoryBean字面意思是工厂Bean。它就是起到一个工厂的作用。其getObject()方法可以生产另外一个对象,且生产的对象,也交由Spring容器管理。

3.FactoryBean不支持依赖注入,因为FactoryBean的调用时机在Spring初始化的早期进行,这时候还没有生成要依赖的对象。

4.Spring容器只负责管理FactoryBean实例的生命周期,而不管FactoryBean的getObject方法的生命周期,所以,不会自动调用getObject对象的close方法。如果有这种需求,那么getObject方法返回的类需要实现DisposableBean接口。

5.通过FactoryBean的实现类,首字母小写,获得的是getObject返回的对象。在首字母小写前面加一个&符号,获得的是FactoryBean实例本身。

6.isSingleton方法如果返回true,那么getObject方法每次返回的都是同一个对象,如果返回false,那么getObject方法每次返回不同的对象。

7.这种方式定义的对象和其他方式定义对象交由Spring管理,有何区别呢?

这种方法,相当于是动态的定义Spring管理的Bean。我们用@Component注解往Spring容器加入对象时,这个对象是固定不变的,而用FactroyBean的getObject定义对象时,可以自定义。

8.如果调用时该FactoryBean尚未完全初始化(例如,因为它涉及循环引用),则抛出相应的FactoryBeanNotInitializedException。(甜点:遇到某个异常时,可以从这个异常类的源码注释,找报错原因)

ListFactoryBean、MapFactoryBean、SetFactoryBean

Spring提供的这几个FactoryBean的实现类。用于在Spring的Bean中配置相应集合属性。在xml中进行配置。本质就是给Bean中的集合属性赋值。具体的使用方法可以参考用法

现在很少使用xml配置了,可以作为了解,在特殊的业务场景下,应用此技术。

相关推荐
测试员周周2 分钟前
【踩坑系列3】飞书机器人集体“失联“?3 个 Gateway 进程让我差点崩溃!一个测试老兵的排查实录
java·python
aq55356002 分钟前
Laravel9.x新特性全解析
java·开发语言·数据库
齿轮3 分钟前
Agent 管理范式演进:从管一句话到管整个系统
人工智能·后端
亦暖筑序6 分钟前
AI 客服系统升级实战:多 Agent 路由 + 多轮记忆 + 敏感词过滤
java·后端
啷咯哩咯啷11 分钟前
纯本地运行的私人文档知识库
前端·人工智能·后端
Determined_man11 分钟前
项目中异常什么时候打印错误和抛出?
后端
zhangzeyuaaa15 分钟前
深入理解 Python GIL:从机制到释放时机
java·网络·python
阿丰资源23 分钟前
基于SpringBoot的房产销售系统设计与实现(附源码+数据库+文档,一键运行)
数据库·spring boot·后端
aLTttY29 分钟前
Spring Boot整合AI大模型实现智能问答系统实战
人工智能·spring boot·后端
小江的记录本40 分钟前
【微服务与云原生架构】DevOps、CI/CD流水线、GitOps 系统性知识体系
分布式·后端·ci/cd·微服务·云原生·架构·devops