一 新增方法

主要都是获取容器基本信息的一些接口,比如获取名称,id和启动时间戳,获取AutowireCapableBeanFactory等接口

二 继承接口

ApplicationContext继承的6个接口使其具有了许多高级特性,因而开发中经常使用的容器基本都是ApplicationContext的实现类

(这些接口都有详细解析文章,可查看spring源码分析目录索引博文: https://www.cnblogs.com/houzheng/p/11801732.html#_label3)

1 MessageSource

此接口用于支持信息的国际化和包含参数的信息的替换,为开发多语言版本提供服务

2 ResourceLoader

ResourceLoader 接口定义了获取单个资源的操作,ResourcePatternResolver继承并添加了按正则匹配获取多个资源的操作,

ApplicationContext正是继承了这个接口有了访问资源方法

3 ApplicationEventPublisher

这个接口定义了两个方法,功能就是发布事件,也就是把某个事件告诉的所有与这个事件相关的监听器。

4 EnvironmentCapable

在spring接口命名中,带有Capable后缀的接口在Spring中带有getXXX的含义,也就是实现了这个接口,就可以通过该接口的实例获取到XXX

同理这个几口自然是可以getEnvironment(),接口只定义了这一个方法,获取Environment实例,Environment接口具有获取属性的方法,通过这个

接口可以获取jvm属性(即jvm启动参数等)和系统属性

5 ListableBeanFactory

ListableBeanFactory接口细化了许多获取Bean功能,比如获取Bean名字和数量,获取同一个class的Bean集合等,spring是鼓励用这个接口去获取Bean的

6 HierarchicalBeanFatory

此接口使容器具备双亲容器功能

三 设计原理

ConfigurableApplicatoinContext接口是ApplicationContex的子接口,作用就是设置上下文 ID,设置父应用上下文,添加监听器,刷新容器,关闭,判断是否活跃等方法,application只定义了getId等方法

所以setId方法在子接口中定义,refresh()方法也在这个接口中定义,IOC容器启动的主要逻辑基本都在这个方法里面,由他的实现抽象类

AbstractApplicationContext实现具体逻辑,通过封装在父抽象类中,子类容器可以直接调用,因为大部分容器初始化逻辑都是一样的,所以子容器只需要关注自身特性即可

比如ClassPathXmlApplicationContext和FileSystemXmlApplicationContext等容器都是继承了AbstractApplicationContext抽象类,初始化的时候都会调用父类的refresh()方法

走的逻辑是一样的!

springIOC源码接口分析(三):ApplicationContext的更多相关文章

  1. springIOC源码接口分析(九):Environment

    先贴一下接口继承关系图,spring容器启动的时候会初始化环境,所以此接口相关接口非常有必要进行了解: 一 PropertyResolver接口 Environment继承了该接口,PropertyR ...

  2. springIOC源码接口分析(八):AutowireCapableBeanFactory

    参考博文: https://blog.csdn.net/f641385712/article/details/88651128 一 接口规范 从宏观上看,AutowireCapableBeanFact ...

  3. springIOC源码接口分析(十一):ConfigurableApplicationContext

    一 实现接口 关系图: ConfigurableApplicationContext接口实现了三个接口,ApplicationContext, Lifecycle, Closeable, Applic ...

  4. springIOC源码接口分析(六):ResourceLoader

    参考博客: https://www.cnblogs.com/jixp/articles/10702486.html 一 定义方法 Spring提供了ResourceLoader接口用于实现不同的Res ...

  5. springIOC源码接口分析(四):MessageSource

    一 定义方法 MessageSource接口用于支持信息的国际化和包含参数的信息的替换 这个接口定义了三个方法: public interface MessageSource { /** * 解析co ...

  6. springIOC源码接口分析(二):ConfigurableBeanFactory

    一 继承功能 1 SingletonBeanRegistry接口 此接口是针对Spring中的单例Bean设计的.提供了统一访问单例Bean的功能,类中定义了以下方法: 2 HierarchicalB ...

  7. springIOC源码接口分析(七):ApplicationEventPublisher

    一 定义方法 此接口主要是封装事件发布功能的接口,定义了两个方法: /** * 通知应用所有已注册且匹配的监听器此ApplicationEvent */ default void publishEve ...

  8. springIOC源码接口分析(五):ListableBeanFactory

    一 继承关系 该接口是对BeanFactory的扩展,允许预加载bean定义的BeanFactory可以实现此接口 其目的在于使实现它的BeanFactory能够枚举所有的Bean 该接口不支持分层结 ...

  9. springIOC源码接口分析(一):BeanFactory

    一 应用场景 BeanFactory接口定义了IOC容器的最基本功能,提供了容器应该具有的功能规范,所有的容器都应该实现这个接口 BeanFactory设计了getBean方法用来获取容器中的Bean ...

随机推荐

  1. xcode无线调试

    前言: xcode9 以上才会有无线调试这个功能,换了一个type-c口的mac,公司的新电脑,但是公司不给配转接口,到某东看了一下,type-c口同时可以转化usb和VGA的要198,官网差不多50 ...

  2. ArrayList数组扩容方式(基于jdk1.8)

    ArrayList无参构造函数为: public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 而DEFA ...

  3. Frangi形态学滤波详解

    利用Hessian矩阵的滤波函数Frangi,网上的文章只是把论文中的公式贴出来了. 我感觉分析下滤波函数是怎么起作用,还是挺有意思的一件事情. Frangi滤波方法的论文是: Frangi A F, ...

  4. 对 Redux 一头雾水?看完这篇就懂了

    首先,学习 Redux 可能会很困难 当你终于学会了如何使用 React,也有了自己去构建一些应用的信心,那会是一种非常棒的感觉.你学会了管理状态,一切看起来井井有条.但是,很有可能这就到了你该学习 ...

  5. 微信生成二维码 PHP

    <?php /** * Created by PhpStorm. * User: liyiming * Date: 2019/8/8 * Time: 14:23 */ # 生成二维码 class ...

  6. Ant Design Pro路由传值

    Ant Design Pro 路由传值 了解Ant Design Pro组件间通讯原理的小伙伴肯定都知道,两个页面之间可以通过Models进行传值,在以往的传值过程中,我都是直接将需要的值直接一股脑的 ...

  7. 解决vue中element组件样式修改无效

    vue中element组件样式修改无效 <style> .detail{ .el-input__inner { height: 48px; } } </style> 直接写st ...

  8. vim添加多行注释的几种方式

    最近需要在阿里云上部署项目,不可避免地会遇到vim这个工具,查了一些资料,总结了一下使用vim多行注释的方法 块操作 多行注释: 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块) ...

  9. TensorFlow——TensorBoard可视化

    TensorFlow提供了一个可视化工具TensorBoard,它能够将训练过程中的各种绘制数据进行展示出来,包括标量,图片,音频,计算图,数据分布,直方图等,通过网页来观察模型的结构和训练过程中各个 ...

  10. 田忌赛马 - dp

    Here is a famous story in Chinese history. That was about 2300 years ago. General Tian Ji was a high ...