ApplicationContext 体系结构

2020-12-07  本文已影响0人  逗逗罗

前一篇文章 BeanFactory 体系结构 中,就 BeanFactory 接口的继承关系、基本的方法定义做了描述,并未对其实现类 DefaultListableBeanFactory 以及 XmlBeanFactory 的代码做分析。
在实际应用中,使用到的 Spring Ioc 容器多是 ApplicationContext 接口的实现类,最常用的几个实现类为:

  1. ClassPathXmlApplicationContext(基于 xml 配置文件的 Ioc 容器),
  2. AnnotationConfigApplicationContext(基于注解的 Ioc 容器),
  3. XmlWebApplicationContext(web应用中基于 xml 文件的 Ioc 容器)

从本篇文章开始,将从 ClassPathXmlApplicationContext 和 AnnotationConfigApplicationContext 类开始分析 Spring Ioc 容器实现的源码。

ApplicationContext 体系结构
images

从 ApplicationContext 体系结构图分析整理类继承关系如下:

ApplicationContext
    WebApplicationContext
        ConfigurableWebApplicationContext
    ConfigurableApplicationContext
        AbstractApplicationContext
            AbstractRefreshableApplicationContext
                AbstractRefreshableConfigApplicationContext
                    -- ClasspathXmlApplicationContext
                    AbstractRefreshableWebApplicationContext
                        -- XmlWebApplicationContext
            GenericApplicationContext
                -- AnnotationConfigApplicationContext   
ClassPathXmlApplicationContext 和 AnnotationConfigApplicationContext 源码分析
总结

本篇文章介绍了 ApplicationContext 体系图,以及简要分析了 ClasspathXmlApplicationContext 和 AnnotationConfigApplicationContext 构造函数中的前两个方法,其中涉及到的一些类以及类的作用如下:

  1. ClasspathXmlApplicationContext

    类名 作用
    ConfigurableEnvironment 1.创建PropertyResolver; 2.向PropertyResolver提供环境变量、 Java进程变量
    PropertyResolver 1.创建PropertyPlaceholderHelper; 2.定义占位符的前缀和后缀(placeholderPrefix、placeholderSuffix); 3.提供getPropertyAsRawString方法给PropertyPlaceholderHelper调用,用来获取指定key对应的环境变量
    PropertyPlaceholderHelper 1.找到字符串中的占位符;2.调用PropertyResolver.getPropertyAsRawString方法,从环境变量中取出占位符对应的值;3.用环境变量的值替换占位符
  2. AnnotationConfigApplicationContext
    在构造函数的 refresh 函数之前,首先创建了 BeanFactory、AnnotatedBeanDefinitionReader、ClassPathBeanDefinitionScanner 对象,然后创建配置类本身的 BeanDefinition 信息并注册到 BeanFactory 中。

分析完 ClasspathXmlApplicationContext 和 AnnotationConfigApplicationContext 构造函数中的前两个方法后,后续的文章将继续分析最核心的方法 refresh。

上一篇 下一篇

猜你喜欢

热点阅读