BeanFactory是一个factory,是spring的IOC的工场,而FactoryBean是个bean,它们两个只是名字很相似。
BeanFactory是一个IOC工场,像常用的DefaultLisableBeanFactory,用于管理和创建Bean,它是IOC最基本的接口,为其他的IOC工场提供规范,很多其他的spring容器都实现了它,如ApplicationContext、XMLBeanFactory等。它提供了通过bean的名字获取实例、判断bean是否在工场中、判断是否为单例等方法。
FactoryBean是一个bean,也是一个接口。该接口中定义了三个方法,getObject(),返回实现了FactoryBean接口的类创建的bean实例,getObjectType返回该实例的类型,isSingleton判断该实例是否为单例。当一个类实现了FactoryBean后,如ABean实现了FactoryBean,通过容器使用getBean(String beanName),即applicationContext.getBean(“aBean”)返回的不是aBean对象,而是aBean实现getObject中生成的实例。
package org.springframework.beans.factory;
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
https://blog.51cto.com/4247649/2118353
https://blog.youkuaiyun.com/wangbiao007/article/details/53183764