您的位置:首页 > 编程语言 > Java开发

BeanFactory和FactoryBean区别

2017-12-16 00:00 459 查看
BeanFactory和FactoryBean是Spring中两个很容易搞混的概念,因为他们的名字基本相同,看过一些Spring书里面讲的模模糊糊,一直没明白FactoryBean这个概念,后来在网上看了一些资料逐渐才慢慢理解,这篇文章主要讲述自己对这两个概念的理解。

BeanFactory:这个很好理解,字如其名,产品Bean的工厂,跟工厂模式中的工厂差不多,这个类能够生产Bean,在Spring IOC中大部分Bean都是通过AbstractBeanFactory工厂产生的,Spring中也定义了基本的工厂接口即BeanFactory,里面有产生Bean的基本方法,BeanFactory其实是一种抽象工厂模式的实现。

FactoryBean:最早看到这个概念的时候是在《深入理解Spring架构与设计原理》一书中,里面有这么一段文字“用户使用容器时,可以使用转移符&来得到FactoryBean本身,用来区分通过容器获取FactoryBean产生的对象和FactoryBean对象本身,举例来说如果myJndiObject是一个FactoryBean,那么是用&myJndiObject得到的是FactoryBean,而不是myJndiObject这个FactoryBean产生的对象”。我的理解是FactoryBean也是一种Bean,其区别与普通的Bean,这个Bean是由某个Bean的FactoryBean产生的。好比FactoryBean比作是一个人,某个具体的FactoryBean就是某种人比如男人、女人。只要某个类Bean实现了FactoryBean这个接口,这个Bean就是一个FactoryBean,FactoryBean里面的接口如下:

public interface FactoryBean<T> {

T getObject() throws Exception;

Class<?> getObjectType();

boolean isSingleton();

}

如果某个类实现了这个接口,并且时间了接口的getObject()方法,通过Spring getBean("beanName")获取到这个Bean所得到的对象是getObject()这个方法所返回的对象,这个用法在动态代理中很常见,比如RPC中的ReferenceBean,配置的是ReferenceBean这个Bean实际返回的是接口的代理对象。FactoryBean不是一个简单的Bean,而是一个能够产生Bean对象以及修饰Bean对象的Bean,如果某个类实现了FactoryBean这个接口,那么这个FactoryBean将不在由Spring管理,而是由这个FactoryBean自身维护,也可以说FactoryBean是Spring提供的一种灵活配置Bean的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息