在使用@ConfigurationProperties注解标注在类上,配置@Component注解,理论上来讲应该是可以创建出SpringBean并自动赋值。
application.properties配置
oauth.key=123
oauth.secret=abc
注解配置
@Component
@ConfigurationProperties(prefix = "oauth")
public class OauthProperties {
private String key;
private String secret;
@Override
public String toString() {
return "OauthProperties{" +
"key='" + key + '\'' +
", secret='" + secret + '\'' +
'}';
}
}
最后从容器中获取时对象的属性都是null
排查发现,这个注解在使用反射赋值时,会将application.properties配置的值 -转驼峰,然后去寻找对应的set方法,如 key ⇒ setKey , key-gen ⇒ setKeyGen。这里的set后面大小写均可以
- 提供好set方法后再次测试
oauthProperties = OauthProperties{key='123', secret='abc'}
- 将set方法改名再测试,发现也是可以的
oauthProperties = OauthProperties{key='123', secret='abc'}
- 测试驼峰命名注入
oauth.key=123
oauth.secret-gen=abc
public void setsecretgen(String secret) {
this.secret = secret;
}
这种注入也是可以的,但是方法名去掉set前缀后注入失败,为了遵循方法名命名规范,set后面还是尽量采取驼峰命名法。
此外,以@Bean的这种方式创建Bean时,也会采取这种规则,寻找对应的set方法。
@Bean
@ConfigurationProperties(prefix = "oauth")
public OauthProperties oauthProperties(){
OauthProperties properties = new OauthProperties();
return properties;
}