IOC基本组建结构图.png

所有源码源于spring:5.1.8.RELEASE版本

1、Resource

用于从底层资源的实际类型(如文件或类路径资源)抽象的资源描述符,每一个接口实现类都代表了一种资源类型,如ClasspathResource、URLResource,FileSystemResource等。每一个资源类型都封装了对某一种特定资源的访问策略。它是spring资源访问策略的一个基础实现,应用在很多场景。
Resource.png

2、BeanDefinition

bean定义描述了一个bean实例,它具有属性值、构造函数参数值和由具体实现提供的进一步信息,用来抽象和描述一个具体bean对象,是描述一个bean对象的基本数据结构。
Beandefinition.png

3、BeanDefinitionReader

BeanDefinitionReader将外部资源对象描述的bean定义统一转化为统一的内部数据结构BeanDefinition。对应不同的描述需要有不同的Reader。如XmlBeanDefinitionReader用来读取xml描述配置的bean对象。
BeandefinitionReader.png

4、BeanFactory

用来定义一个很纯粹的bean容器。它是一个bean容器的必备结构。同时和外部应用环境等隔离。BeanDefinition是它的基本数据结构。它维护一个BeanDefinitions Map,并可根据BeanDefinition的描述进行bean的创建和管理。
BeanFactory.png

5、ApplicationContext

应用上下文,或者也叫做spring容器。其实它的基本实现是会持有一个BeanFactory对象,并基于此提供一些包装和功能扩展。
BeanFactory实现了一个容器基本结构和功能,但是与外部环境隔离。那么读取配置文件,并将配置文件解析成BeanDefinition,然后注册到BeanFactory的这一个过程的封装自然就需要ApplicationContext。
ApplicationContext和应用环境息息相关,常见实现有ClasspathXmlApplicationContext,FileSystemXmlApplicationContext,WebApplicationContext等。
ApplicationContext提供功能:

  • 访问应用程序组件的Bean工厂方法。继承自{@link ListableBeanFactory}。
  • 以通用方式加载文件资源的能力。继承自{@link org.springframework.core.io.ResourceLoader}接口。
  • 向注册侦听器发布事件的能力。继承自{@link ApplicationEventPublisher}接口。
  • 解析消息的能力,支持国际化。继承自{@link MessageSource}接口。
  • 继承父类上下文。后代上下文中的定义总是优先的。 例如,这意味着单个父上下文可以被整个web应用程序使用,而每个servlet都有自己独立于任何其他servlet的子上下文。

ApplicationContext.png

tencent.jpg