參考: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實現的屬性鬆散綁定造成的,這樣清晰多了。