自顶向下了解Spring容器结构

本文出自可怜人 可乐可乐可,更多精彩点击https://blog.csdn.net/weixin_44494373

自顶向下了解Spring容器结构_第1张图片

这张图,大致是Spring IoC容器中设计概况

可以看到Spring将各个功能都划分成了一个接口,并去实现他,以此能降低耦合度、最大化达到重复利用的目的。用户实际使用的类是ApplicationContext,Spring通过一步步的继承关系,给ApplicationContext了处理IoC需求的功能。Spring正是围绕ApplicationContext和BeanFactory设计的框架。

下面介绍一下这几个核心接口与类的功能


首先是BeanFactory的体系

BeanFactory:简单IoC容器的基本功能

自顶向下了解Spring容器结构_第2张图片

HierarchicalBeanFactory:(Hierarchical层次的)提供了获取双亲的功能

自顶向下了解Spring容器结构_第3张图片

ListableBeanFactory:提供了更为便捷的获取Bean的功能

自顶向下了解Spring容器结构_第4张图片

AutowireCapableBeanFactory:自动注入的能力

自顶向下了解Spring容器结构_第5张图片

通过各种BeanFactory接口的子类,Spring赋予了ApplicationContext,管理Bean,获取Bean,自动注入Bean的功能。


Resource体系

Spring将系统中的资源全部抽象为Resource接口,对于不同的资源提供了不同的子类实现,通过ResourceLoader读取资源

ApplicationContext体系

自顶向下了解Spring容器结构_第6张图片

事实上不只是FileSystemXmlApplicationContext类,Spring还提供了很多实现类,他们的区别本质上是对应的数据元的不同,如下图

自顶向下了解Spring容器结构_第7张图片

从类的名字就能看出他们有什么区别。

然后我们逐个说明每个层级的作用

ApplicationContext

为应用程序提供配置的中央接口。在应用程序运行时,这是只读的,但如果实现支持,则可以重新加载。

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

自顶向下了解Spring容器结构_第8张图片

ConfigurableApplicationContext: ApplicationContext标识了这是一个上下文,并且拥有自己的父母节点,id与名字,而Configurable版本则提供了上下文环境的配置功能,并且提供了refresh()方法(这个方法很重要,是初始化的入口函数)
自顶向下了解Spring容器结构_第9张图片

到这里,ApplicationContext的体系结构其实已经完成了,这两个接口划出了一个能够管理环境、依赖、具有加载资源、响应Message等等等等的应用。但Spring所提供的不只是规范而已,Spring同时提供了实现类

AbstractApplicationContext、AbstractRefreshableApplicationContext等等等等、对应接口,使用模板方法的设计模式,一步步构建了一个Spring IoC成品。

附赠:完整的方法版本

自顶向下了解Spring容器结构_第10张图片

你可能感兴趣的:(春招冲关-Java后端,spring)