FactoryBean理解
一、简介
Spring中有两种Bean,一种是普通的Bean,另外一种就是FactoryBean。FactoryBean与普通的Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。创建出来的对象的类型由getObjectType方法决定,是否是单例由isSingleton方法决定。上面提到的这个三个方法就组成了FactoryBean接口。
package org.springframework.beans.factory;
import org.springframework.lang.Nullable;
public interface FactoryBean<T> {
@Nullable
T getObject() throws Exception;
@Nullable
Class<?> getObjectType();
default boolean isSingleton() {
return true;
}
}二、什么时候用?
一般情况下,Spring利用反射实例化<bean>的class属性执行的实现类来初始化bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息,配置方式的灵活性是受限的。Spring为此提供了一个FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化Bean的逻辑。FactoryBean接口对于Spring框架来说占用重要的地位,Spring自身就提供了70多个FactoryBean的实现。它们隐藏了实例化一些复杂Bean的细节,给上层应用带来了便利。
FactoryBean 通常是用来创建比较复杂的bean,一般的bean 直接用xml配置即可,但如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean。
三、实践出真知
3.1 新建一个maven项目
引入Spring的依赖:
成品的目录结构如下,下面依次实现每个类和接口。
3.2 接口和实现类
3.3 工厂Bean
3.4 xml
3.5 测试类
3.6 测试运行
Last updated
Was this helpful?