ApplicationContext类继承设计

本文以AnnotationConfigEmbeddedWebApplicationContext为例,使用Idea的类图插件,查看该类的继承图,并对此进行分析。

图中我们可以看到AnnotationConfigEmbeddedWebApplicationContext继承了EmbeddedWebApplicationContext和GenericWebApplicationContext类。

ApplicationContext实现类设计

ApplicationContext有两大子类

  • GenericApplicationContext
  • AbstractRefreshableApplicationContext。

GenericApplictionContext及其子类持有一个单例的固定的DefaultListableBeanFactory实例,在创建GenericApplicationContext实例的时候就会创建DefaultListableBeanFactory实例。固定的意思就是说,即使调用refresh方法,也不会重新创建BeanFactory实例。

与之对应的就是AbstractRefreshableApplicationContext,它实现了所谓的热刷新功能,它内部也持有一个DefaultListableBeanFactory实例,每次刷新refresh()时都会销毁当前的BeanFactory实例并重新创建DefaultListableBeanFactory


BeanFactory

BeanFactory及其实现类是Spring IOC的核心接口,实现了init和get Bean等功能,负责生产和管理Bean。(例如DefaultListableBeanFactory)

Spring提供了ApplicationContext体系,扩展了BeanFactory。实现了例如:资源加载,消息源处理,事件机制,生命周期管理等等一系列实际开发应用中所需要的高级特性。

  • 支持不同的消息源:ApplicationContext扩展了MessageSource,使Spring得以处理国际化信息,为开发多语言版本的应用提供服务。
  • 访问资源: 这个特性体现在对是ResourceLoader和ResourcePatternResolver的支持上,这样我们可以从不同的地方得到定义Bean的资源。这样,可以灵活的定义bean定义信息,例如从不通的IO途径或者网络资源来得到Beans定义信息
  • 支持应用事件,获得事件响应功能:ApplicationEventPublisher拥有发布事件功能,为Spring引入事件机制。
  • 生命周期管理(Lifecycle)
  • 运行环境设置(EnvironmentCapable)。

相关资料

ApplicationContext类继承设计