回顾BeanFactory接口的类体系结构与源码

一 概述

 

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,这些方法都是根据名称进行获取。

猜你喜欢

转载自blog.csdn.net/calm_encode/article/details/114010960