Spring源码——BeanFactory

一、BeanFactory的继承体系:
在这里插入图片描述
其中BeanFactory作为最顶层的一个接口类,它定义了IOC容器的基本功能规范,BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory、AutowireCapableBeanFactory。
但是从上图中我们可以发现最终的默认实现类是DefaultListableBeanFactory,他实现了所有的接口。那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合,他主要是为了区分在Spring内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。
例如,ListableBeanFactory 接口表示这些Bean是可列表的,而HierarchicalBeanFactory 表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。
AutowireCapableBeanFactory 接口定义Bean的自动装配规则。这四个接口共同定义了Bean 的集合、Bean之间的关系、以及Bean的行为。
最基本的IOC容器接口BeanFactory。
下面是通过Eclipse查看的spring-beans的源码:在这里插入图片描述
接口里面的方法与属性:

	//对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,
	//如果需要得到工厂本身,需要转义
	String FACTORY_BEAN_PREFIX = "&";
	
	//根据bean的名字,在IOC容器中得到bean实例
	Object getBean(String name) throws BeansException;

	//根据bean的名字和class类型来得到bean实例,增加了类型安全验证机制
	<T> T getBean(String name, Class<T> requiredType) throws BeansException;

	<T> T getBean(Class<T> requiredType) throws BeansException;

	Object getBean(String name, Object... args) throws BeansException;

	//提供对bean的检索,看看是否在IOC容器中有这个名字的bean
	boolean containsBean(String name);

	//根据bean名字得到bean实例,并同时判断这个bean是不是单例
	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

	boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

	boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;

	//得到bean实例的Class类型
	Class<?> getType(String name) throws NoSuchBeanDefinitionException;

	//得到bean的别名,如果根据别名检索,name其原名也会被检索出来
	String[] getAliases(String name);

      在BeanFactory里只对IOC容器的基本行为作了定义,根本不关心你的bean是如何定义怎样加载的。

正如我们只关心工厂里得到的是什么产品对象,至于工厂是怎么生产这些对象的,这个基本的接口不关心。
而要知道工厂是如何产生对象的,我们需要看具体的IOC容器实现,Spring提供了许多IOC容器的实现。比如XmlBeanFactory,ClassPathXmlApplicationContext等。其中XmlBeanFactory就是针对最基本的IOC容器的实现,这个IOC容器可以读取XML文件定义的BeanDefinition(XML文件中对bean的描述),如果说XmlBeanFactory是容器中的屌丝,ApplicationContext应该算容器中的高富帅了。
ApplicationContext是Spring提供的一个高级的IOC容器,它除了能够提供IOC容器的基本功能外,还为用户提供了以下的附加服务。
从ApplicationContext接口的实现,我们可以看出其特点:
1.支持信息源,可以实现国际化(实现MessageSource接口)。
2.访问资源。(实现ResourcePatternResolver接口)。
3.支持应用事件(实现ApplicationEventPublisher接口)。
)2、BeanDefinition (Bean的定义)
SpringIOC容器管理了我们定义的各种Bean对象及其相互的关系,Bean对象再Spring实现中是以BeanDefinition来描述的,其继承体系如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42255265/article/details/84110826