1.概述
Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean,这两种Bean都被容器管理,但工厂
Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。在
Spring框架内部,有很多地方有FactoryBean的实现类,它们在很多应用如(Spring的AOP、ORM、事务管理)及与其它第三框架
(ehCache)集成时都有体现,下面简单分析FactoryBean的用法。
2.实例
以下SimpleFactoryBean类实现了FactoryBean接口中的三个方法。 并将该类配置在XML中。
Java代码
-
public
class
SimpleFactoryBean implements
FactoryBean {
- private
boolean
flag;
-
- public
Object getObject() throws
Exception {
- if
(flag) {
- return
new
Date();
- }
- return
new
String("false");
- }
-
- @SuppressWarnings
("unchecked")
- public
Class getObjectType() {
- return
flag ? Date.class
: String.class
;
- }
-
- public
boolean
isSingleton() {
- return
false
;
- }
-
- public
void
setFlag(boolean
flag) {
- this
.flag = flag;
- }
- }
-
- <bean id="factoryBeanOne" class
="com.study.demo.factorybean.SimpleFactoryBean" >
- <property name="flag">
- <value>true
</value>
- </property>
- </bean>
-
- <bean id="factoryBeanTwo" class
="com.study.demo.factorybean.SimpleFactoryBean" >
- <property name="flag">
- <value>false
</value>
- </property>
- </bean>
-
- public
class
MainTest {
- public
static
void
main(String[] args) {
- Resource res = new
ClassPathResource("bean.xml");
- BeanFactory factory = new
XmlBeanFactory(res);
- System.out.println(factory.getBean("factoryBeanOne").getClass());
- System.out.println(factory.getBean("factoryBeanTwo").getClass());
- }
- }
通过简单的测试可知,该类输出如下:
class java.util.Date
class java.lang.String
也就是说,容器通过getBean方法返回的不是FactoryBean本身,而是FactoryBean实现类中getObject()方法所返回的对象。
分享到:
相关推荐
通过FactoryBean在获取目标类的时间我们将增强的代理类给返回,使得我们调用方法的时间使用的代理类来增强,如果需要继续使用未代理的对象,则直接@Autowired 注入使用.
spring FactoryBean的小样本,如何在运行时在两个bean之间进行切换。
本篇文章主要介绍了Spring中的FactoryBean,如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean
主要介绍了spring中的FactoryBean代码示例,涉及FactoryBean的实现等相关内容,具有一定参考价值,需要的朋友可以了解下。
主要介绍了spring中FactoryBean中的getObject()方法实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
spring源码解析之FactoryBean相关测试代码demo,文章中也有相关代码
Spring中的FactoryBean.rar
主要介绍了简单了解Spring中BeanFactory与FactoryBean的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring This is spring framework study ...八、使用spring FactoryBean技术模拟mybatis MapperScan注解 https://github.com/AvengerEug/spring/tree/develop/implement-mapperscan 九、mybatis源码学习 ...
主要介绍了Spring基于ProxyFactoryBean创建AOP代理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
这篇代码主要适用于我的博客,用来帮助理解Spring配置文件+FactoryBean的实例化过程。注意,这里是FactoryBean,而不是BeanFactory,下载资源要看清楚哈。
主要介绍了深入了解Spring中的FactoryBean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要给大家介绍了关于Spring中BeanFactory与FactoryBean接口的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
主要介绍了spring如何通过FactoryBean配置Bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Spring BeanFactory和FactoryBean区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...
Spring介绍 1. Spring 2. 使用spring的主要目的 3. Spring的模块 Ejb容器(以前是) Ioc容器(现在的控制权) 控制反转Ioc(Invertion of control)依赖注入(Dependency Injection) ...13. 接口FactoryBean的使用
Spring和MyBatis的整合是Java...Spring使用FactoryBean来创建特定类型的bean,例如MyBatis的Mapper接口的动态代理实例。BeanDefinitionRegistry则用于注册这些动态生成的bean,确保它们可以被Spring容器识别和管理。
spring 自定义 FactoryBean 样例工程,可以通过这个工程通过实现FactoryBean来扩展Spring容器
BeanFactory和FactoryBean有什么区别; Spring中用到的设计模式; SPI 机制(Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制), 很多地方有用到: AOP Spring的AOP的底层实现原理; ...