美文网首页
【Spring源码配置文件解析】1.Environment系统配

【Spring源码配置文件解析】1.Environment系统配

作者: 天还下着毛毛雨 | 来源:发表于2020-12-29 15:19 被阅读0次

    1. 配置信息的加载

    Enviroment对象:负责加载系统的配置信息

    image
    image
    image
    image
    image

    new StandardEnvironment()会调到父类的构造方法中

    image

    父类的构造方法会调到自己实现的customizePropertySources()


    image image
    image

    至此enviroment已经把系统的配置信息读到了内部的PropertySource中

    本地配置信息加载

    需要在application.xml中配置这样的自定义标签,来指定要加载的配置文件

    image

    那么,在spring容器解析xml文件的时候,就会解析到这个标签

    image

    解析context:property-placeholder标签

    先根据标签头获取到一个链接


    image

    再根据链接从spring.handlers文件找到对应的处理器

    image

    找的时候会先调用Handler的init方法初始化内部的解析器,每种冒号后面的属性都会对应一个解析器,比如componetScan,property-placeholder

    image

    最终都放在内部从父类NamespaceHandlerSupport继承而来的parses容器中,是个key-value的map


    image image

    找到了这个类ContextNamespaceHandler


    image

    接下来调用这个类的parse方法,这里会先从内部的解析器容器中找到合适的解析器

    image

    这里获取到的是PropertyPlaceholderBeanDefinitionParser这个类


    image
    调用 PropertyPlaceholderBeanDefinitionParser 的parse方法

    这部分的代码稍微有点绕,要么调父类的方法,父类的方法中又回调子类的重写的方法

    先看继承图

    image

    首先调用父类AbstractBeanDefinitionParser的parse

    image

    方法体中有调用了下面一级父类的parseInternal方法,这个方法其实就是构建了一个BeanDefinition对象

    image

    其中需要注意的点就是这个BD对象的beanClass由子类解析器返回

    image

    可以看到,返回了一个PropertySourcesPlaceholderConfigurer类型,这个类型的bean后面再讲是干嘛的

    构建BD对象的过程中又调用到了子类解析器的parseInternal的doParse方法,其实就是对BD对象的一些属性进行填充,这里最重要的标签中的location属性,表明要解析那个配置文件

    image

    parseInternal方法最终得到一个完成的Bd,parse方法在后面对这个类型为PropertySourcesPlaceholderConfigurer的BD注册到容器中,这就说明后续这个类型的bean会被实例化。

    image

    PropertySourcesPlaceholderConfigurer类

    从类图中看看这个bean和普通的bean是否一样

    image

    可以看到这个类实现了一个很重要的接口BeanFactoryPostProcessor,那么他会比在普通的bean解析成BD之后,实例化之前进行实例化,并被容器调用到他的postProcessBeanFactory方法

    image
    1. 将enviorment对象放到propertySources中
    2. 解析本地配置文件,放到propertySources中
    image

    该方法后面还会调用processProperties方法,将创建的StringValueResolver匿名对象,。该对象实现resolveStringValue方法,将调用propertyResolver(持有enviroment / 本地配置信息 的propertySource)来处理

    image image image

    相关文章

      网友评论

          本文标题:【Spring源码配置文件解析】1.Environment系统配

          本文链接:https://www.haomeiwen.com/subject/ktofoktx.html