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里面的接口如下:
如果某个类实现了这个接口,并且时间了接口的getObject()方法,通过Spring getBean("beanName")获取到这个Bean所得到的对象是getObject()这个方法所返回的对象,这个用法在动态代理中很常见,比如RPC中的ReferenceBean,配置的是ReferenceBean这个Bean实际返回的是接口的代理对象。FactoryBean不是一个简单的Bean,而是一个能够产生Bean对象以及修饰Bean对象的Bean,如果某个类实现了FactoryBean这个接口,那么这个FactoryBean将不在由Spring管理,而是由这个FactoryBean自身维护,也可以说FactoryBean是Spring提供的一种灵活配置Bean的方式。
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的方式。
相关文章推荐
- Spring中ApplicationContext和beanfactory区别
- BeanFactoryPostProcessor和BeanPostProcessor的区别
- LocalSessionFactoryBean加载Hibernate 映射的几种方式及区别
- Spring中BeanFactory和ApplicationContext的区别
- (15)FactoryBean和BeanFactory的区别
- BeanFactory和FactoryBean的区别
- BeanFactoryPostProcessor和BeanPostProcessor的区别
- Spring中的beanFactory和applicationContext的联系和区别
- Spring BeanFactory 与 FactoryBean的区别
- ApplicationContext和BeanFactory的区别-----spring源码心得
- Spring之BeanFactory与ApplicationConText区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
- BeanFactory与ApplicationContext 区别
- Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
- spring中BeanFactory和FactoryBean的区别
- BeanFactoryPostProcessor和BeanPostProcessor的区别
- Spring的BeanFactoryPostProcessor和BeanPostProcessor接口的区别
- Spring中的beanFactory和applicationContext的联系和区别
- BeanFactoryPostProcessor和BeanPostProcessor的区别