ApplicationContext和ConfigurableApplicationContext解析

这里是我学习Spirng IOC开始文章,改文章中整合了Spring IOC体系的相关类和接口的源码解析。
Spring IOC学习开始

正文开始

既然介绍这两个接口,自然要知道这两个接口在IOC整个体系中的位置和两者之间的联系。

ApplicationContext定了高级容器的基本规范,其实他也不是直接继承BeanFactory基础容器,可以看到ApplicationContext直接父接口对BeanFactory进行很多拓展其中就包括:

  • 事件的注册和发布
  • 消息解析
  • 资源解析
  • Bean工厂层级管理
  • 监听器
  • 容器环境
    通过以上拓展,我们基本可以知道高级IOC容器有哪些特点,这也是学习整个ApplicationContext容器重点了解的部分。

再比较ApplicationContext和ConfigurableApplicationContext定义的方法以及下图层级关系,ConfigurableApplicationContext是ApplicationContext的子接口,也就包含了ApplicationContext。通过方法可以知道,ConfigurableApplicationContext重在对各种属性的配置,而ApplicationContext接口主要各种属性的get方法。

Spring这种将get和set分开到两个接口的设计增大了属性设置和获取的灵活性,将两者分开也更加清晰。在以后的解决方案设计中,可以参考,将配置信息和获取信息分开,两者互不干扰,在保证重要的基础属性不变的情况,可以按需进行拓展。其实Spring的框架设计中应用了大量的装饰者模式,这也是高拓展点的需要
在这里插入图片描述

1. ApplicationContext

该类提供了高级IOC规范
其中有几个注意点:

  • 从ListableBeanFactory接口继承来的:用于访问应用组件的工厂方法
  • 从ResourceLoader接口继承来的:用通用的方式加载文件资源
  • 从ApplicationEventPublisher接口继承来的:注册和发布事件
  • 从MessageSource接口继承来的:处理消息,支持国际化

从父应用上下文定义的在子上下文中将始终保持优先。

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
		MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
   

	/**
	 * 返回一个唯一的应用上下文id
	 * @return the unique id of the context, or {@code null} if none
	 */
	@Nullable
	String getId();

	/**
	 * 返回已经部署的该应用上下文的名称.
	 * @return a name for the deployed application, or the empty String by default
	 */
	String getApplicationName();

	/**
	 * 返回此上下文友好的名称---这有什么用呢?
	 * @return a display name for this context (never {@code null})
	 */
	String getDisplayName();

	/**
	 * 返回该上下文第一次被加载的时间戳
	 * @return the timestamp (ms) when this context was first loaded
	 */
	long getStartupDate();

	/**
	 *返回父应用上下文, 如果没有父上下文,该上下文就是在上下文层次的根
	 * @return the parent context, or {@code null} if there is no parent
	 */
	@Nullable
	ApplicationContext getParent();


	AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;

}

这其中对AutowireCapableBeanFactory getAutowireCapableBeanFactory()方法有疑惑,然后网上百度了一下。Spring提供了一种机制,能够为第三方框架赋能,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值