springboot屬性注入異常之謎

2021-10-09 04:10:16 字數 997 閱讀 3212

@bean

@configurationproperties

(prefix =

"aa"

)public aaobj aaobj()

如上aaobj只有乙個屬性:map bb;

通過測試我們可以發現aaobj.bb =

這個問題當時困擾了我一兩個小時,後來因為有其他工作就直接把classpath下的配置檔案刪了才算繞過去,今天正好有時間了正好來研究下這個問題。

一開始我打算在程式中通過map map = environment.getproperty(「aa.bb」,map.class)來測試,結果發現獲取的值為null,經過除錯發現,配置檔案中的aa.bb=被系統拆解成了「aa.bb.a =1;aa.bb.b=1;aa.bb.c=1」共三個配置項environment.getproperty需要完全equals才算匹配上。那麼@configurationproperties(prefix = 「aa」)

註解又是如何完成map型別的屬性注入的呢,具體的**寫在mapbinder.bindentries裡:

public

void

bindentries

(configurationpropertysource source, map

map)

}}

打斷點除錯source物件,可以看到他就是environment的sourceproperty,但是不同的是這個source多了乙個filter,filter屬性為「aa.bb」,然後再configurationpropertyname name : (iterableconfigurationpropertysource) source 中遍歷出來的屬性就全部是aa.bb有關的。

通過上面的分析我們可以知道,當我們在配置檔案中注入map型別的屬性時,需要注意springboot對這類配置的處理。總的來說,我覺得還是刪除那些不打算使用的配置檔案比較靠譜呀,不然的話真的會變成一場災難。

SpringBoot 屬性值注入的方式

1 configurationproperties和 value configurationproperties預設從全域性配置檔案中獲取值 configurationproperties value 功能批量注入配置檔案中的屬性值 乙個個的注入值 鬆散繫結 支援不支援 spel 不支援支援 jsr...

spring boot 配置注入

spring boot配置注入有變數方式和類方式 參見 spring boot 自定義配置屬性的各種方式 變數中又要注意靜態變數的注入 參見 spring boot 給靜態變數注入值 靜態變數注入需要注意 value 與set函式必須連著寫,不能分開。另外記得在類前加 component 注入 pr...

springboot整合dubbo實現非同步呼叫

二 在consumer端實現 三 結果 與正常dobbu使用一樣,只是設定service屬性async ture service version 1.0 group hehe async true public class userserviceimpl implements userservice...