兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil
為了讓我提供的通用 Mapper 的 boot-starter 同時兼容 Spring Boot 1.x 和 2.x,增加了這么一個工具類。
在 Spring Boot 中,能夠直接注入 XXProperties 類的地方不需要使用這個工具類。
但是在Spring 的接口和啟動流程設計中,有些情況下只能通過EnvironmentAware
接口得到Environment
對象,此時你想得到 XXProperties 類沒有更好的辦法。
也許有人直接從Environment
對象中遍歷獲取所有的配置信息,但是有一個無法完美解決的問題就是relax 值,例如first-name
,firstName
, FIRST_NAME
都可以代表同一個參數(shù),在自己代碼中很難處理這種情況。
通用 Mapper 在兼容兩者過程中遇到過很多 BUG,這一次通過一個工具類解決了這個問題。
在 Spring Boot 1.x 中,可以通過下面代碼綁定參數(shù)到對象:
try { RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment); Map<String, Object> properties = resolver.getSubProperties(""); //targetClass 目標類型,例如 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();
上面這兩段代碼也是最近才找到,要不然這個功能會出現(xiàn)的更早。
由于上面的兩處代碼都在 spring-boot.jar 中,因此編譯時不能同時依賴兩個不同的版本,而且為了方便以后項目依賴從 1.x 升級到 2.x,因此針對上面兩處代碼全部使用反射實現(xiàn)。
簡單用法如下:
MapperProperties mapperProperties = SpringBootBindUtil.bind( environment, MapperProperties.class, MapperProperties.PREFIX);
至此通過environment就能得到想要的配置類了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
相關文章
利用Spring IOC技術實現(xiàn)用戶登錄驗證機制
這篇文章主要為大家詳細介紹了Spring IOC技術實現(xiàn)用戶登錄驗證機制的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10Spring?Boot中優(yōu)雅地處理參數(shù)傳遞的技巧分享
最近一直在學習Spring Boot,今天將其中的從前臺過來的參數(shù)傳遞總結一下,下面這篇文章主要給大家介紹了關于Spring?Boot中優(yōu)雅地處理參數(shù)傳遞的技巧,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05Springbootadmin與security沖突問題及解決
這篇文章主要介紹了Springbootadmin與security沖突問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08