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实现的属性松散绑定造成的,这样清晰多了。

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