Spring中BeanFactory和FactoryBean的区别

BeanFactory就是一个Bean工厂,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖

BeanFactory只是个接口,并不是IOC容器的具体实现,但是Spring容器给出了很多种实现,如 DefaultListableBeanFactoryXmlBeanFactoryApplicationContext

FactoryBean实现了FactoryBean接口的bean,用户可以通过实现该接口定制实例化Bean的逻辑

以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBeangetObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。

package org.springframework.beans.factory;  
public interface FactoryBean {  
    T getObject() throws Exception;  
    Class getObjectType();  
    boolean isSingleton();  
}   

getObject():返回由FactoryBean创建的Bean实例

isSingleton():返回由FactoryBean创建的Bean实例的作用域是singleton还是prototype;

如果isSingleton()返回true,则该实例会放到Spring容器中单实例缓存池中。

getObjectType():返回FactoryBean创建的Bean类型。

当配置文件中的class属性配置的实现类是FactoryBean时,通过getBean()方法返回的不是FactoryBean本身,而是FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean()方法。

文章来源:https://www.cnblogs.com/aspirant/p/9082858.html

你可能感兴趣的:(Spring中BeanFactory和FactoryBean的区别)