分布式配置中心disconf第三部(基于xml配置的实现原理)

本文深入探讨了Spring框架中配置文件加载与参数注入的实现原理,以及Disconf配置中心如何通过ReloadablePropertiesFactoryBean和ReloadingPropertyPlaceholderConfigurer实现远程配置的实时更新与动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于配置与基于注入实现方式,区别还是比较大的,为了便于理解,我们先了解一下大家常见的场景,通过spring配置properties文件,达到使用@Value注解获取参数配置的原理:

  • 传统的spring参数注解实现原理
    首先需要定一个叫做PropertyPlaceholderConfigurer的bean,定义如下
    <bean id="appProperty"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <array>
                <value>classpath:app.properties</value>
            </array>
        </property>
    </bean>

    结合类图的集成结构看下:
    762e4c28b0a6c364469b86becf9e4096135.jpg
    1、PlaceholderConfigurerSupport---提供基础的操作,如properties的load、merge,实现流转换成为property对象
    2、PropertyResourceConfigurer--因为这个类集成了BeanFactoryPostProcessor,所以容器加载阶段,执行postProcessBeanFactory方法,调用子类也就是PlaceholderConfigureSupport的doProcessProperties方法,完成properties装载,bean中的$value替换
    3、PlaceholderConfigureSupport---执行具体的替换动作,兼容spring版本差异带来的配置替换不同
    4、PropertyPlaceholderConfigurer---通过processProperties方法提供替换的具体实现

  • disconf配置实现原理:
    ReloadablePropertiesFactoryBean,做了哪些事情
    1、文件远程下载,存储至内存
    2、把下载至本地的文件,提供给父类,保证PlaceholderConfigurerSupport能够load到数据
    ReloadingPropertyPlaceholderConfigurer,做了哪些事情
    1、当远程数据变化,需要调用该接口的propertiesReloaded方法,做bean的重新赋值,这里使用的是注册监听事件的方式
    2、系统正常启动时,提供了一个bean属性替换的功能也就是processProperties,这里重写了PropertyPlaceholderConfigurer的processProperties实现,为什么要重写,因为我们实现了disconf所特有的解析和替换逻辑!

转载于:https://my.oschina.net/13426421702/blog/3050281

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值