1. 程式人生 > >BeanFactory 和FactoryBean的區別

BeanFactory 和FactoryBean的區別

Spring的BeanFacotry是一個類工廠,使用它來建立各種型別的Bean,最主要的方法就是getBean(String beanName),該方法從容器中返回特定名稱的Bean,只不過其中有一種Bean是FacotryBean.

一個Bean 要想成為FacotryBean,必須實現FactoryBean 這個介面。

FactoryBean定義了三個介面方法:

    1)Object getObject():返回由FactoryBean建立的Bean的例項,如果isSingleton()方法返回true,是單例的例項,該例項將放入Spring的緩衝池中;

    2)boolean isSingleton*():確定由FactoryBean建立的Bean的作用域是singleton還是prototype;

    3) getObjectType():返回FactoryBean建立的Bean的型別。

FactoryBean 是一直特殊的bean,它實際上也是一個工廠,我們在通過FactoryBeanName得到的Bean,是FacotryBean建立的Bean,即它通過getObject()建立的Bean.我們要想得到FactoryBean本身,必須通過&FactoryBeanName得到,即在BeanFactory中通過getBean(&FactoryBeanName)來得到 FactoryBean

注:在spring 中是通過BeanFactoryUtils.isFactoryDereference()

來判斷一個Bean是否是FactoryBean.

spring 內部實現中應該是在通過BeanFacotry 的getBean(String beanName) 來得到Bean時,如果這個Bean是一個FactoryBean,則把它生成的Bean返回,否者直接返回Bean.