BeanFactory与FactoryBean

定义
BeanFactory是Spring IoC容器实现的顶层接口,是管理IoC容器中对象的工厂类定义。
FactoryBean本质上就是一个Bean,但是这个Bean是一个能产生对象的工厂。

FactoryBean的作用
FactoryBean的作用是,当某个对象实例化很繁琐,通过XML配置文件定义非常复杂,这个时候就可以
使用FactoryBean通过代码的方式实现对象的实例化逻辑。

FactoryBean接口
FactoryBean也是一个接口,它的定义很简单,如下:

public interface FactoryBean {
    Object getObject() throws Exception;
    Class getObjectType();
    boolean isSingleton();
}


getObject()方法返回FactoryBean生成的对象,可以通过实现该方法完成所需的对象实例化逻辑;    
getObjectType()方法只返回getObject()方法返回的对象的类型;
isSingleton()方法顾名思义,判断FactoryBean生成的对象是否是单例模式。

import com.FactoryBeanTest.Generator;
import org.springframework.beans.factory.FactoryBean;

public class NextSequenceFactoryBean implements FactoryBean {
	public Object getObject() throws Exception {
		return new Sequence().getNextSequence();
	}
	
	public Class getObjectType() {
		return Sequence.class;
	}
	
	public boolean isSingleton() {
		return true;
	}
}

要使用NextSequenceFactoryBean,只需要做如下配置:

<bean id="generator" class="...GeneratorSequence">
    <property name="nSequence">
        <ref bean="nextSequence"/>
    </property>
</bean>
<bean id="nexSequence" class="...NextSequenceFactoryBean">
</bean>

配置上看不出与平常的bean定义有何不同,不过,只有当我们看到GeneratorSequence的定
义的时候,才会知道FactoryBean的魔力到底在哪。GeneratorSequence的定义如下:

public class GeneratorSequence
{
    private Sequence nSequence;
    // 相应的setter方法
    // ...
}

GeneratorSequence所声明的依赖nSequence的类型为Sequence,而不是NextSequenceFactoryBean。也就是说FactoryBean类型的bean定义,通过正常的id引用,容器返回的是FactoryBean所“生产”的对象类型,而非FactoryBean实现本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值