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配置了,可以作为了解,在特殊的业务场景下,应用此技术。
Spring之FactoryBean详解相关推荐
- Spring启动过程详解
Spring启动过程详解 前言 spring容器启动过程 AnnotationConfigApplicationContext 有参数构造方法 无参数构造 AnnotatedBeanDefinitio ...
- Spring JdbcTemplate方法详解
2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...
- Spring Boot 配置文件详解
2019独角兽企业重金招聘Python工程师标准>>> 第二篇 : Spring Boot配置文件详解 文章首发于微信公众号<程序员果果> 地址:https://mp.w ...
- spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解
spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环 ...
- Spring的lazy-init详解
Spring中lazy-init详解 ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化 (也就是依赖注入).提前实例化意味着作为初始 ...
- spring boot配置文件详解
spring boot配置文件详解 application.properties是spring-boot的核心配置文件,这个配置文件基本可以取代我们ssm或者ssh里面的所有的xml配置文件. 当我们 ...
- 一文搞定 Spring Data Redis 详解及实战
转载自 一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...
- Spring Boot 单元测试详解+实战教程
转载自 Spring Boot 单元测试详解+实战教程 Spring Boot 的测试类库 Spring Boot 提供了许多实用工具和注解来帮助测试应用程序,主要包括以下两个模块. spring ...
- Spring事务管理详解_基本原理_事务管理方式
Spring事务管理详解_基本原理_事务管理方式 1. 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象 ...
最新文章
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
- 无法用php smtp发送邮件. 您的服务器可能没有配置用此方法_Web自动化测试:邮件发送测试报告...
- 压测场景下的 TIME_WAIT 处理
- html5 js贪吃蛇,html5+js 贪吃蛇
- Django:ORM基本操作-CRUD,管理器对象objects,----->删除:删除单个数据,删除批量数据
- Centos7查看网络配置
- HAR with Python WebDriver and BrowserMob Proxy
- 拯救者Y7000在CentOS7上面无法打开网卡 Ath10k (QCA9377)
- ASPICE过程开发
- cad延伸命令怎么用_原来我们都用错了CAD直线命令,你不能忽视的CAD直线绘制技巧详解...
- android 亮屏 激活自动亮度调节,Android 屏幕亮度调节(2.0以后出现亮度自动调节)如何开启、关闭亮度自动调节...
- 浙江工商大学计算机研究生院,浙江工商大学研究生院
- 在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示
- ` 这个符号叫什么名字?怎么打出来?
- qt准确获取本机mac和ip地址
- latex如何更改某一段落的字体_latex 段落编号 latex 引用段落
- 小米 linux 内核面试,编译适配小米2S的CM Linux内核源代码及问题解决
- 抖音服务器带宽有多大,才能每天6亿人同时刷?
- 系统杂类--------删除GHOSTwin7桌面顽固IE图标
- return与finally到底谁先执行