ConfigurationProperties到底需不需要getter
为什么要讨论这个问题, 工作中一个同事写的类使用了ConfigurationProperties
, 只提供了标准的setter方法. 属性的访问, 提供了定制的方法. 可以参考EurekaClientConfigBean
.
他使用的是spring boot 2.0.0.M5版本, 可以正常获取配置文件中的属性值, 但是在1.5.8.RELEASE获取不到.
看下文档和源码:
Annotation for externalized configuration. Add this to a class definition or a @Bean method in a @Configuration class if you want to bind and validate some external Properties (e.g. from a .properties file).
外置配置的注解. 当需要绑定外置配置(如properties或者yaml配置)的时候, 将其加到使用了@Configuration
注解的类声明处或者@Bean
标注的方法上.
值的绑定是通过ConfigurationPropertiesBindingPostProcessor
在bean实例创建后, 初始化回调(如InitializingBean
的afterPropertiesSet
方法)或者init-method
之前之前完成的.
1.5.x
执行绑定的时候如果找不到getter方法, 会抛出RelaxedBindingNotWritablePropertyException
异常. debug模式下, 会打印Ignoring benign property binding failure.
2.x
2.x版本中, 如果找不到getter方法, 会将原值默认为null, 并继续执行绑定.