一 概述
BeanFactory是org.springframework.beans.factory.BeanFactory接口定义,是基础类型的IOC容器(实现控制反转),他提供了完整的IOC服务支持。简言之,BeanFactory就是一个管理Bean的工厂,它主要负责初始化Bean,并调用它的生命周期方法。
Spring是通过BeanFactory实例化,配置和管理Bean。
二 BeanFactory的类体系结构
根据BeanFactory的类体系结构可知,BeanFactory作为顶层接口存在三个子接口,三个接口进行了功能上的增强:
- ListableBeanFactory
- HierarchicalBeanFactory
- AutoWireCapableBeanFactory
此外,ConfigurableBeanFactory接口继承了HierarchicalBeanFactory接口,并进行了一定的增强。
AbstractBeanFactory作为抽象类,实现了ConfigurableBeanFactory中的大部分功能。同样AbstractAutowireCapableBeanFactory作为抽象类,它继承了AbstractBeanFactory抽象类,同时实现了AutowireCapableBeanFactory接口。
非抽象类类DefaultListableBeanFactory继承自AbstractAutowireCapableBeanFactory,除此之外还实现了外来接口BeanDefinitionRegistry。
最后的XmlBeanFactory在现在的Spring版本中已经不被移除了。
三 BeanFactory的源码
public interface BeanFactory {
//用来引用一个实例,或把它和工厂产生的Bean区分开
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
//根据实例的名字获取别名
String[] getAliases(String name);
}
根据源码可知,BeanFactory接口中重载了4个getBean实例方法。其次是根据名称判断存在与否的containsBean方法,根据名称判断是否为单例的isSingleton方法,根据名称判断是否为原型的isPrototype方法,其次是根据名称判断匹配的isTypeMatch方法。
上述方法方法除外,还有获取类型的方法getType,获取别名的方法geAliases,这些方法都是根据名称进行获取。