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配置了,可以作为了解,在特殊的业务场景下,应用此技术。

相关推荐
许彰午3 小时前
14-字段级SM4加密与SM2签名
java·低代码·架构
MC皮蛋侠客3 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
许彰午5 小时前
13-describe元数据输出
java·低代码·架构·状态模式
Profile排查笔记5 小时前
指纹浏览器怎么设置 IP?代理配置、检测与排错流程
前端·人工智能·后端·自动化
用户3721574261356 小时前
Java 设置 Word 文档编辑限制并允许指定区域编辑
java
宠友信息6 小时前
社区类源码开发实践中的仿小红书系统技术要点分析
java·spring boot·redis·mysql·uni-app·vue·内容运营
IT_陈寒6 小时前
SpringBoot自动配置失效?你可能漏了这个小开关
前端·人工智能·后端
用户3721574261356 小时前
Java 设置 PDF 表单域只读或扁平化
java
摇滚侠7 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发应用 阅读笔记 1
spring boot·笔记·后端
用户8356290780517 小时前
使用 Python 在 Excel 中插入 OLE 对象
后端·python