springboot @ConfigurationProperties註冊源碼解析-鬆散綁定

參考:https://wenku.baidu.com/view/ccfcf417598102d276a20029bd64783e09127def.html        https://blog.csdn.net/londa/article/details/107007686

一、源碼解析(對應springboot源碼查看)

  org.springframework.boot.context.properties.source.ConfigurationPropertyName類重寫了hashcode和equals,是爲了保證屬性名稱與配置文件中(如yml)的定義屬性名稱的值相同。因爲涉及Map,所以要重寫hashcode和equals方法。具體參考hashcode和equals關係:https://zhuanlan.zhihu.com/p/347342971

二、鬆散的綁定約束使用

   Spring Boot將Environment屬性綁定到@ConfigurationProperties Bean時會使用一些寬鬆的規則,所以Environment屬性名和Bean屬性名不需要精確匹配。

   比如在對象User中有一個firstName屬性,那麼在配置文件中對應如下配置項均會匹配:

user.firstName // 標準駝峯命名語法
user.first-name // 短橫線隔開表示,推薦用於.properties和.yml文件中
user.first_name // 下劃線表示,用於.properties和.yml文件的可選格式
USER_FIRST_NAME // 大寫形式,推薦用於系統環境變量

備註:

  我在使用jod-converter jar包時,發現ym配置文件l的jod converter配置屬性(office-home)與jar包中的屬性名(String officeHome)不一致,很不理解,經過調研,發現原來是springboot實現的屬性鬆散綁定造成的,這樣清晰多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章