spring 注解
1、@ConfigurationProperties 与 @Value 区别
(1)@Value 要写全路径
(2)@ConfigurationProperties 用了这个,并且指定 prefix, 那它的属性就能自动匹配了,不用再写 @Value 了
(3)@ConfigurationProperties 要用 @EnableConfigurationProperties
(4)为了使用 @ConfigurationProperties
需要在 spring boot application 上添加 EnableConfigurationProperties
的注解 (这个试了一下,不用貌似也没有大问题)
(5)@ConfigurationProperties
可以添加前缀,然后其属性就会按照变量的名称默认在 application.*
中寻找指定的变量。
(6)如果想要从其他配置文件获取配置内容,可以添加一个额外的注释 @PropertySource("classpath:xxx.yml")
(7)@ConfigurationProperties
与 @Value
的一个重大区别在于它采用比较灵活的方式寻找配置。可以看到这里的配置可以是驼峰形式,也可以是下划线分割的,还可以是中横线分割的
(8)如果用了@ConfigurationProperties,并且也指定了 prefix, 这个时候,再用 @Value的话,它会以@Value的为准(即把它的配置当全路径去匹配,会忽略 prefix, 这个时候,就会找不到,或找错的情况)
@Data
@Configuration
@ConfigurationProperties(prefix = "oauth.biz")
public class BizConfig {
// 这种会自动匹配 oauth.biz.namespace
private String namespace;
// 这种它会按全路径去匹配,也是可以的
@Value("${oauth.biz.bizLoginUrl}")
private String bizLoginUrl;
// 这个它是把 redirectUrl 当全路径去匹配,会找错或找不到,所以 @ConfigurationProperties 与 @Value 并不是共用的。
@Value("${redirectUrl}")
private String redirectUrl;
}