【转】BeanFactory 和FactoryBean的区别
来源: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.
上一篇: 【转】 spring的beanFactory和factoryBean
下一篇: Ant复制文件
推荐阅读
-
springmvc中 / 和 /* 的区别
-
ubuntu 16.04 安装 python2.7 以及 cv2, dist-package 和 site-package 的区别, import cv2 出问题解答
-
多if…if和多if…else if的区别
-
ASP中Server.Execute和Execute实现动态包含(include)脚本的区别
-
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别,gzencodegzdeflate
-
require.include.require_once.include_once的用法和区别_PHP教程
-
C#中重写(override)和覆盖(new)的区别
-
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别_PHP
-
css3 翻转和旋转的区别_html/css_WEB-ITnose
-
辛星与你彻底分析PHP中的include和require等的区别