兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil
為了讓我提供的通用 Mapper 的 boot-starter 同時(shí)兼容 Spring Boot 1.x 和 2.x,增加了這么一個(gè)工具類。
在 Spring Boot 中,能夠直接注入 XXProperties 類的地方不需要使用這個(gè)工具類。
但是在Spring 的接口和啟動(dòng)流程設(shè)計(jì)中,有些情況下只能通過EnvironmentAware接口得到Environment對象,此時(shí)你想得到 XXProperties 類沒有更好的辦法。
也許有人直接從Environment 對象中遍歷獲取所有的配置信息,但是有一個(gè)無法完美解決的問題就是relax 值,例如first-name,firstName, FIRST_NAME都可以代表同一個(gè)參數(shù),在自己代碼中很難處理這種情況。
通用 Mapper 在兼容兩者過程中遇到過很多 BUG,這一次通過一個(gè)工具類解決了這個(gè)問題。
在 Spring Boot 1.x 中,可以通過下面代碼綁定參數(shù)到對象:
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 中,綁定更簡單,如下:
Binder binder = Binder.get(environment); return binder.bind(prefix, targetClass).get();
上面這兩段代碼也是最近才找到,要不然這個(gè)功能會出現(xiàn)的更早。
由于上面的兩處代碼都在 spring-boot.jar 中,因此編譯時(shí)不能同時(shí)依賴兩個(gè)不同的版本,而且為了方便以后項(xiàng)目依賴從 1.x 升級到 2.x,因此針對上面兩處代碼全部使用反射實(shí)現(xiàn)。
簡單用法如下:
MapperProperties mapperProperties = SpringBootBindUtil.bind(
environment,
MapperProperties.class,
MapperProperties.PREFIX);
至此通過environment就能得到想要的配置類了。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
java保留小數(shù)的四種實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了java保留小數(shù)的四種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
SpringBoot啟動(dòng)之SpringApplication初始化詳解
這篇文章主要介紹了SpringBoot啟動(dòng)之SpringApplication初始化詳解,首先初始化資源加載器,默認(rèn)為null;斷言判斷主要資源類不能為null,否則報(bào)錯(cuò),需要的朋友可以參考下2024-01-01
spring Boot打包部署到遠(yuǎn)程服務(wù)器的tomcat中
這篇文章主要給大家介紹了關(guān)于spring Boot打包部署到遠(yuǎn)程服務(wù)器的tomcat中的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
Kotlin + Retrofit + RxJava簡單封裝使用詳解
這篇文章主要介紹了Kotlin + Retrofit + RxJava簡單封裝使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式
這篇文章主要介紹了Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

