Spring中的FactoryBean

Spring 中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean 即 FactoryBean。
FactoryBean跟普通Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBeangetObject方法所返回的对象

FactoryBean接口定义

1
2
3
4
5
6
7
8
9
10
11
12
package org.springframework.beans.factory;

public interface FactoryBean<T> {
//返回的对象实例
T getObject() throws Exception;

//Bean的类型
Class<?> getObjectType();

//true是单例,false是非单例 在Spring5.0中此方法利用了JDK1.8的新特性变成了default方法,返回true
boolean isSingleton();
}

应用场景

FactoryBean 通常是用来创建比较复杂的bean,一般的bean 直接用xml配置即可,但如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean。

当使用ApplicationContext的getBean()方法获取FactoryBean实例本身而不是它所产生的bean,则要使用&符号+id。比如,现有FactoryBean,它有id,在容器上调用getBean(“myBean”)将返回FactoryBean所产生的bean,调用getBean(“&myBean”)将返回FactoryBean它本身的实例。

分享到: