自顶向下了解Spring容器结构

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

image-20210116135228289

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

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

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


首先是BeanFactory的体系

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

image-20210116135139443

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

image-20210116135055412

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

ApplicationContext简略

AutowireCapableBeanFactory:自动注入的能力

image-20210116135403631

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


Resource体系

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

ApplicationContext体系

image-20210116140807324

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

image-20210116141143103

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

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

ApplicationContext

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

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

image-20210116155032333

ConfigurableApplicationContext: ApplicationContext标识了这是一个上下文,并且拥有自己的父母节点,id与名字,而Configurable版本则提供了上下文环境的配置功能,并且提供了refresh()方法(这个方法很重要,是初始化的入口函数)
image-20210116153901730

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

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

附赠:完整的方法版本

image-20210116154301409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值