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

相关推荐
空中湖9 分钟前
Spring AI 多模型接入实战:OpenAI、Ollama、通义千问切换只需改配置
java·人工智能·spring
tianyatest12 分钟前
表格分类统计及排序
java·excel·暖通
HONG````37 分钟前
HarmonyOS ArkUI Image 组件完全指南:objectFit、占位图与加载回调
后端
万亿少女的梦16839 分钟前
基于Spring Boot与MySQL的乡镇群众服务系统设计与实现
java·spring boot·mysql·权限管理·前后端分离
thefool1122661 小时前
Java 面向对象
java
2501_948106911 小时前
计算机毕业设计之jsp-智慧旅游分享平台
java·开发语言·spark·汽车·课程设计·旅游
阿里云云原生1 小时前
Agent 不再是“玩具”!AgentScope Java 2.0 GA 发布:构建企业级分布式智能体底座
java·开发语言·分布式·agentscope
4154111 小时前
MyBatis-Plus + PostGIS 实战(四):GeoJSON 序列化与前端地图对接,全局 WKT + 局部 GeoJSON,两种格式优雅共存
java·mybatis·postgis·geojson
峥嵘life1 小时前
Andorid 打开热点,关闭有线网,ifconfig卡死分析解决
java·服务器·网络
HillVue2 小时前
Token 叙事退潮,DAA 重新定义 AI 价值标准
java·人工智能·eclipse