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