springIOC源码接口分析(三):ApplicationContext

一 新增方法

 主要都是获取容器基本信息的一些接口,比如获取名称,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()方法

  走的逻辑是一样的!

 

 

posted @ 2019-11-11 22:09  侯小厨  阅读(487)  评论(0编辑  收藏  举报
Fork me on Gitee