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

兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil

 更新時(shí)間:2018年12月25日 10:16:12   作者:isea533  
今天小編就為大家分享一篇關(guān)于兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

為了讓我提供的通用 Mapper 的 boot-starter 同時(shí)兼容 Spring Boot 1.x 和 2.x,增加了這么一個(gè)工具類。

在 Spring Boot 中,能夠直接注入 XXProperties 類的地方不需要使用這個(gè)工具類。

但是在Spring 的接口和啟動(dòng)流程設(shè)計(jì)中,有些情況下只能通過(guò)EnvironmentAware接口得到Environment對(duì)象,此時(shí)你想得到 XXProperties 類沒(méi)有更好的辦法。

也許有人直接從Environment 對(duì)象中遍歷獲取所有的配置信息,但是有一個(gè)無(wú)法完美解決的問(wèn)題就是relax 值,例如first-namefirstName, FIRST_NAME都可以代表同一個(gè)參數(shù),在自己代碼中很難處理這種情況。

通用 Mapper 在兼容兩者過(guò)程中遇到過(guò)很多 BUG,這一次通過(guò)一個(gè)工具類解決了這個(gè)問(wèn)題。

在 Spring Boot 1.x 中,可以通過(guò)下面代碼綁定參數(shù)到對(duì)象:

try {
  RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment);
  Map<String, Object> properties = resolver.getSubProperties("");
  //targetClass 目標(biāo)類型,例如 MapperProperties
  T target = targetClass.newInstance();
  RelaxedDataBinder binder = new RelaxedDataBinder(target, prefix);
  binder.bind(new MutablePropertyValues(properties));
  return target;
} catch (Exception e) {
  throw new RuntimeException(e);
}

Spring Boot 2.x 中,綁定更簡(jiǎn)單,如下:

Binder binder = Binder.get(environment);
return binder.bind(prefix, targetClass).get();

上面這兩段代碼也是最近才找到,要不然這個(gè)功能會(huì)出現(xiàn)的更早。

由于上面的兩處代碼都在 spring-boot.jar 中,因此編譯時(shí)不能同時(shí)依賴兩個(gè)不同的版本,而且為了方便以后項(xiàng)目依賴從 1.x 升級(jí)到 2.x,因此針對(duì)上面兩處代碼全部使用反射實(shí)現(xiàn)。

源碼地址:https://github.com/abel533/mapper-boot-starter/blob/master/mapper-spring-boot-autoconfigure/src/main/java/tk/mybatis/spring/mapper/SpringBootBindUtil.java

簡(jiǎn)單用法如下:

MapperProperties mapperProperties = SpringBootBindUtil.bind(
    environment, 
    MapperProperties.class, 
    MapperProperties.PREFIX);

至此通過(guò)environment就能得到想要的配置類了。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Windows10下的超詳細(xì)Java安裝全過(guò)程

    Windows10下的超詳細(xì)Java安裝全過(guò)程

    文章主要介紹了如何在Windows?10系統(tǒng)下安裝Java開(kāi)發(fā)工具包(JDK),包括Java的下載與安裝步驟以及Java環(huán)境的配置方法,最后通過(guò)命令行驗(yàn)證Java環(huán)境是否配置成功
    2025-01-01
  • java文件操作之java寫(xiě)文件簡(jiǎn)單示例

    java文件操作之java寫(xiě)文件簡(jiǎn)單示例

    這篇文章主要介紹了java文件操作中的java寫(xiě)文件示例,需要的朋友可以參考下
    2014-03-03
  • Java網(wǎng)絡(luò)編程基礎(chǔ)詳解

    Java網(wǎng)絡(luò)編程基礎(chǔ)詳解

    網(wǎng)絡(luò)編程是指編寫(xiě)運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過(guò)網(wǎng)絡(luò)連接起來(lái)。本文介紹了一些網(wǎng)絡(luò)編程基礎(chǔ)的概念,并用Java來(lái)實(shí)現(xiàn)TCP和UDP的Socket的編程,來(lái)讓讀者更好的了解其原理
    2021-08-08
  • Springboot事務(wù)失效的原因及解決辦法詳解

    Springboot事務(wù)失效的原因及解決辦法詳解

    這篇文章主要介紹了Springboot事務(wù)失效的原因及解決辦法詳解,spring中的事務(wù)是依賴AOP的,AOP是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過(guò)代理類訪問(wèn)的方法才能被攔截,而addMultiFile直接內(nèi)部調(diào)用了addFile方法,所以addFile中的事務(wù)就不會(huì)生效
    2023-10-10
  • java保留小數(shù)的四種實(shí)現(xiàn)方法

    java保留小數(shù)的四種實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了java保留小數(shù)的四種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • SpringBoot啟動(dòng)之SpringApplication初始化詳解

    SpringBoot啟動(dòng)之SpringApplication初始化詳解

    這篇文章主要介紹了SpringBoot啟動(dòng)之SpringApplication初始化詳解,首先初始化資源加載器,默認(rèn)為null;斷言判斷主要資源類不能為null,否則報(bào)錯(cuò),需要的朋友可以參考下
    2024-01-01
  • JDK源碼之Vector與HashSet解析

    JDK源碼之Vector與HashSet解析

    HashSet、HashMap、ArrayList、LinkedList、Vector這幾個(gè)在Java編程中經(jīng)常用到,他們之間有很多聯(lián)系,有很多相通的地方,我們這次先了解一下Vector與HashSet
    2021-06-06
  • spring Boot打包部署到遠(yuǎn)程服務(wù)器的tomcat中

    spring Boot打包部署到遠(yuǎn)程服務(wù)器的tomcat中

    這篇文章主要給大家介紹了關(guān)于spring Boot打包部署到遠(yuǎn)程服務(wù)器的tomcat中的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Kotlin + Retrofit + RxJava簡(jiǎn)單封裝使用詳解

    Kotlin + Retrofit + RxJava簡(jiǎn)單封裝使用詳解

    這篇文章主要介紹了Kotlin + Retrofit + RxJava簡(jiǎn)單封裝使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式

    Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式

    這篇文章主要介紹了Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論

萝北县| 恭城| 始兴县| 边坝县| 洛阳市| 和田市| 太和县| 弋阳县| 星子县| 大埔县| 白河县| 乌鲁木齐县| 渭南市| 六盘水市| 黄龙县| 墨脱县| 佛坪县| 灵山县| 洛扎县| 舞钢市| 北票市| 西盟| 苗栗市| 巴林右旗| 屯门区| 上林县| 新乡县| 贡山| 荆州市| 黄山市| 双柏县| 南靖县| 民丰县| 金门县| 武胜县| 苏尼特左旗| 山阳县| 阜新市| 泾阳县| 石楼县| 宜春市|