Spring中BeanFactory跟FactoryBean的区别和联系

BeanFactory

    BeanFactory是接口,用于管理Bean的一个工厂。BeanFactory是IOC容器的核心接口,它主要作用就是实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

    BeanFactory只是一个接口,并不是IOC容器的具体实现,Springp容器提供了很多种实现,如:XmlBeanFactory、ApplicationContext等。现在一般使用ApplicationContext,它包含了原始的BeanFactory的所有功能,同时还进行了扩展,如AOP功能、web应用等。XmlBeanFactory类似以XML配置元数据,实现将以XML方式描述组成的对象及对象间的依赖关系。

FactoryBean

    FactoryBean也是接口,实现此接口的类也是一种Bean。Spring中共有二种bean,一种是普通bean(就是上面说的BeanFactory管理的bean),另一种是实现FactoryBean接口的Bean。FactoryBean管理的Bean实际上也是由spring进行管理、实例化,配置,因此由FactoryBean管理的Bean不能再次配置到Spring配置文件中,否则会报异常。

    从spring的applicationContext或BeanFactory获取bean时,获取到是FactoryBean创建的实例,而不是FactoryBean自己;如果想通过spring拿到FactoryBean,需要在名称前面加&符号。

  FactoryBean在IOC的应用,在我们获取Bean的时候,都会经过getObjectForBeanInstance方法,这个方法会进行如下判断:

1.如果bean是被FactoryBean引用,但bean对象不是Factory,则抛出异常(BeanIsNotAFactoryException);也就是说通过FactoryBean获取bean,这个bean不能配置到spring配置文件或者注解实例化;

2.如果Bean实例不是FactoryBean,或者指定名称是FactoryBean引用,也就是普通的bean调用,则直接返回;

3.以上情况都不是,则对FactoryBean调用

你可能感兴趣的:(JVM,Java,SE)