為了讓我提供的通用 mapper 的 boot-starter 同時兼容 spring boot 1.x 和 2.x,增加了這么一個工具類。
在 spring boot 中,能夠直接注入 xxproperties 類的地方不需要使用這個工具類。
但是在spring 的接口和啟動流程設計中,有些情況下只能通過environmentaware
接口得到environment
對象,此時你想得到 xxproperties 類沒有更好的辦法。
也許有人直接從environment
對象中遍歷獲取所有的配置信息,但是有一個無法完美解決的問題就是relax 值,例如first-name
,firstname
, first_name
都可以代表同一個參數,在自己代碼中很難處理這種情況。
通用 mapper 在兼容兩者過程中遇到過很多 bug,這一次通過一個工具類解決了這個問題。
在 spring boot 1.x 中,可以通過下面代碼綁定參數到對象:
1
2
3
4
5
6
7
8
9
10
11
|
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 中,綁定更簡單,如下:
1
2
|
binder binder = binder.get(environment); return binder.bind(prefix, targetclass).get(); |
上面這兩段代碼也是最近才找到,要不然這個功能會出現的更早。
由于上面的兩處代碼都在 spring-boot.jar 中,因此編譯時不能同時依賴兩個不同的版本,而且為了方便以后項目依賴從 1.x 升級到 2.x,因此針對上面兩處代碼全部使用反射實現。
簡單用法如下:
1
2
3
4
|
mapperproperties mapperproperties = springbootbindutil.bind( environment, mapperproperties. class , mapperproperties.prefix); |
至此通過environment就能得到想要的配置類了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/isea533/article/details/79121981