吃透Spring源码(八):Spring中FactoryBean真相揭秘
一,FactoryBean和BeanFactory
- FactoryBean:首先它是一个Bean,但又不仅仅是一个Bean。它是一个能生产或修饰对象生成的工厂Bean,类似于设 计模式中的工厂模式和装饰器模式。它能在需要的时候生产一个对象,且不仅仅限于它自身,它能返回任何Bean的实例。
- BeanFactory:是Spring中Bean工厂的顶层接口,也是我们常说的SpringIOC容器,它定下了IOC容器的一些规范和常用方法并管理着Spring中所有的Bean。
二,FactoryBean揭秘
定义一个FactoryBean用于生产A对象:
public class MyFactoryBean implements FactoryBean<A> {
@Override
public A getObject() throws Exception {
return new A();
}
@Override
public Class<?> getObjectType() {
return A.class;
}
}
在xml中把定义的MyFactoryBean注入进去:
<bean id="myFactoryBean" class="com.bobo.MyFactoryBean"></bean>
1,解析为beanDefinition
通过debug调试,当源码走完obtainFreshBeanFactory()方法后,MyFactoryBean已经解析为BeanDefinition并且放入到BeanDefinitionMap中:

2,实例化对象
继续调试,当我们走完finishBeanFactoryInitialization(beanFactory);方法时可以看到MyFactoryBean已经被实例化并且缓存到了singletonObjects中: