ApplicationContext的孩子们

ConfigurableApplicationContext

继承了 ApplicationContext 获得了其所有能力:环境、可列举获取bean的容器、层级关系的容器、消息、事件发送、资源解析器

继承了 Lifecycle  获得了生命周期管理的 开启组件、停止组件、获取当前组件是否运行的能力

继承了 Closeable  获得了关闭IO流的能力

增加了 设置唯一ID、设置父容器、设置环境、增加后置处理器、增加应用监听器、增加资源解析器、刷新配置等配置能力。

 

AbstractApplicationContext

继承了 DefaultResourceLoader  获得了 资源加载的能力

实现了ConfigurableApplicationContext 接口。对接口中方法提供了通用的默认实现。 模板方法模式

核心在 refresh 方法

 

AbstractRefreshableApplicationContext

继承了AbstractApplicationContext 实现了部分抽象方法,

提出了新的抽象方法 loadBeanDefinitions 子类根据自身特性进行具体实现

 

AbstractRefreshableConfigApplicationContext

继承了AbstractRefreshableApplicationContext

并提供了config locations 的公共处理器。

 

AbstractXmlApplicationContext

继承了 AbstractRefreshableConfigApplicationContext

提供了通过 XmlBeanDefinitionReader 加载配置文件注册bean为 BeanDefinition 的能力

子类只需要实现 getConfigResources 方法

 

其中获取ConfigResources 提供给子类一个hook函数,使其可以自定义指定的configresources 代码如下所示:

    protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws         BeansException, IOException {
		Resource[] configResources = getConfigResources();
		if (configResources != null) { // 如返回不为null  钩子函数起作用了
			reader.loadBeanDefinitions(configResources);
		}
		String[] configLocations = getConfigLocations();
		if (configLocations != null) {
			reader.loadBeanDefinitions(configLocations);
		}
	}

	// 钩子函数,子类不重写直接使用默认实现
  	@Nullable
	protected Resource[] getConfigResources() {
		return null;
	}

 

ClassPathXmlApplicationContext

继承了 AbstractXmlApplicationContext

提供了设置 configLocations , 设置父容器,refresh 的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值