最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nacos(SpringBoot)配置加載及刷新方式

 更新時(shí)間:2024年12月10日 14:29:49   作者:ke_ek121  
文章主要介紹了NacosConfigAutoConfiguration的配置加載及刷新過(guò)程,包括NacosConfigBeanDefinitionRegistrar的注冊(cè)、NacosPropertySource的處理、自動(dòng)刷新機(jī)制以及NacosValueAnnotationBeanPostProcessor的實(shí)現(xiàn)

Nacos(SpringBoot)配置加載及刷新

pom文件

<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.12</version>
        </dependency>

看看對(duì)應(yīng)的META-INF/spring.factories,這里我們主要研究NacosConfigAutoConfiguration

如圖,@EnableNacosConfig 字面意思 開(kāi)啟nacos配置,我們看下這個(gè)注解

這里引入了NacosConfigBeanDefinitionRegistrar,這個(gè)關(guān)鍵了,我們看看它都注入了哪些bean

這里我們看看這個(gè)postProcessor

在registerNacosConfigBeans中注入

然后invokeNacosPropertySourcePostProcessor調(diào)用

這里就是尋找nacosPropertySources(@NacosPropertySources或者@NacosPropertySource的元屬性)

首先調(diào)用addNacosPropertySource添加到environment

接下來(lái)就是看看是否配置了自動(dòng)刷新,如果是,則會(huì)添加一個(gè)監(jiān)聽(tīng)器;

監(jiān)聽(tīng)器做的就是替換environment中的舊值;

接下來(lái)我們看一下

com.alibaba.nacos.spring.context.event.config.EventPublishingConfigService#addListener

加入之前,做了個(gè)適配,然后再加入。

我們看看這個(gè)DelegatingEventPublishingListener做了什么

再收到配置信息時(shí),首先調(diào)用了實(shí)際的監(jiān)聽(tīng)器的監(jiān)聽(tīng)方法去替換環(huán)境中的配置,然后發(fā)布了NacosConfigReceivedEvent。接下來(lái)我們看看誰(shuí)監(jiān)聽(tīng)了這個(gè)事件,也是@NacosValue能夠刷新的原因所在

NacosValueAnnotationBeanPostProcessor

先看看@NacosValue是如何取值的

了解Spring中bean的創(chuàng)建的都知道,屬性注入是在populateBean()階段,調(diào)用后置處理器的postProcessPropertyValues()方法進(jìn)行注入,NacosValueAnnotationBeanPostProcessor繼承了

com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor,這里記錄了一個(gè)大致流程

org.springframework.beans.factory.annotation.InjectionMetadata#inject--->

com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.AnnotatedFieldElement#inject

com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor#getInjectedObject

doGetInjectedBean是個(gè)抽象方法,我們看一下NacosValueAnnotationBeanPostProcessor的實(shí)現(xiàn)

可以看到,最終就是這樣拿到了值,然后進(jìn)行注入。

接下來(lái)是值的自動(dòng)刷新

說(shuō)刷新之前,看一下下面這段代碼,也就是處理了哪些值進(jìn)行自動(dòng)刷新

這里先后處理了字段和方法

經(jīng)過(guò)上面的處理,將autoRefreshed為true的目標(biāo)加入到placeholderNacosValueTargetMap中去。

前面我們提到,NacosValueAnnotationBeanPostProcessor監(jiān)聽(tīng)了NacosConfigReceivedEvent

我們看一下它的實(shí)現(xiàn)

簡(jiǎn)單說(shuō)呢,就是遍歷上面的placeholderNacosValueTargetMap進(jìn)行一個(gè)值的更新。

總結(jié)

由上我們可知nacos在springboot環(huán)境下配置加載及刷新的大致過(guò)程

在平時(shí)使用時(shí),如果要實(shí)現(xiàn)自動(dòng)刷新,@NacosPropertySource@NacosValue兩個(gè)注解的autoRefresh屬性必須同時(shí)為true,使用Spring的注解@Value可以注入,但無(wú)法實(shí)現(xiàn)自動(dòng)刷新

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring中的注入list集合

    spring中的注入list集合

    這篇文章主要介紹了spring中的注入list集合問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例

    java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案

    這篇文章主要介紹了java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例,
    2021-02-02
  • MAC環(huán)境下安裝多個(gè)JDK的實(shí)現(xiàn)步驟

    MAC環(huán)境下安裝多個(gè)JDK的實(shí)現(xiàn)步驟

    為了能夠在Mac上管理多個(gè)JDK版本,首先需要安裝這些不同的JDK版本,這篇文章主要介紹了MAC環(huán)境下安裝多個(gè)JDK的實(shí)現(xiàn)步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • Spring?Boot中的@EnableAutoConfiguration注解詳解

    Spring?Boot中的@EnableAutoConfiguration注解詳解

    這篇文章主要介紹了Spring?Boot中的@EnableAutoConfiguration注解詳解,Spring?Boot是一個(gè)非常流行的Java框架,它可以快速創(chuàng)建基于Spring的應(yīng)用程序。Spring?Boot提供了許多自動(dòng)配置功能,使得開(kāi)發(fā)者可以非常容易地創(chuàng)建一個(gè)可運(yùn)行的應(yīng)用程序,需要的朋友可以參考下
    2023-08-08
  • Java之定時(shí)器Timer和定時(shí)任務(wù)TimerTask應(yīng)用以及原理解讀

    Java之定時(shí)器Timer和定時(shí)任務(wù)TimerTask應(yīng)用以及原理解讀

    文章介紹了Java JDK自帶的定時(shí)器Timer和定時(shí)任務(wù)TimerTask的使用和原理,Timer和TimerTask成對(duì)出現(xiàn),Timer是定時(shí)器,TimerTask是定時(shí)任務(wù),TimerTask實(shí)現(xiàn)Runnable接口的run方法,Timer的屬性TimerThreadthread繼承Thread
    2024-12-12
  • Java聊天室之實(shí)現(xiàn)客戶端一對(duì)一聊天功能

    Java聊天室之實(shí)現(xiàn)客戶端一對(duì)一聊天功能

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易聊天室之實(shí)現(xiàn)客戶端一對(duì)一聊天功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下
    2022-10-10
  • Hadoop源碼分析五hdfs架構(gòu)原理剖析

    Hadoop源碼分析五hdfs架構(gòu)原理剖析

    本篇是Hadoop源碼分析系列文章第五篇,主要介紹Hadoop的hdfs架構(gòu)原理剖析,后續(xù)本系列文章會(huì)持續(xù)更新,有需要的朋友可以借鑒參考下
    2021-09-09
  • Java圖形界面GUI布局方式(小結(jié))

    Java圖形界面GUI布局方式(小結(jié))

    這篇文章主要介紹了Java圖形界面GUI布局方式(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 完美解決idea創(chuàng)建文件時(shí),文件不分級(jí)展示的情況

    完美解決idea創(chuàng)建文件時(shí),文件不分級(jí)展示的情況

    這篇文章主要介紹了完美解決idea創(chuàng)建文件時(shí),文件不分級(jí)展示的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • SpringBoot整合Shiro兩種方式(總結(jié))

    SpringBoot整合Shiro兩種方式(總結(jié))

    這篇文章主要介紹了SpringBoot整合Shiro兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

赤峰市| 吉安县| 天峻县| 南汇区| 华容县| 廊坊市| 岚皋县| 阜城县| 庆元县| 绥芬河市| 莫力| 铅山县| 荆门市| 双牌县| 固镇县| 大关县| 松潘县| 竹山县| 金乡县| 伊川县| 肇东市| 顺平县| 康乐县| 萨嘎县| 襄汾县| 义乌市| 龙门县| 长兴县| 酉阳| 武城县| 秭归县| 漠河县| 延川县| 泽库县| 靖西县| 蛟河市| 丘北县| 定远县| 光山县| 永康市| 林周县|