欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【转】BeanFactory 和FactoryBean的区别

程序员文章站 2022-05-23 21:03:14
...

来源:http://yjc0407.iteye.com/blog/1036054

 

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.