区别:
BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean.在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但 对于FactoryBean而言,这个Bean不是简单的Bean,而是一个能生成或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰模式类型。
BeanFactory:
负责实例化 定位 配置应用程序中的对象及建立这些对象间的依赖。
FactoryBean
以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean。FactoryBean接口定义了以下3个接口方法:
- Object getObject():返回有FactoryBean创建的Bean实例,如果isSingleton()返回true,则该实例会放到Spring容器的单实例缓存池中。
- boolean isSingleton():确定由FactoryBean创建Bean的作用域是singleton还是prototype.
- Class getObjectType():返回FactoryBean创建Bean的类型。 当配置文件中 的class属性配置的实现类是FactoryBean时,通过getBean方法返回的不是FactoryBean本身,而是 FactoryBean.getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean()方法。 如果用户希望获取 FactoryBean的实例,则需要在使用getBean(beanName)方法时显式地在beanName前加上“&”前缀.