@Value
注解是Spring Boot开发者熟悉的一种注解,它能够快速将配置信息加载到Spring的Bean中。使用该注解,我们可以方便地将配置信息注入到各个组件中。
例如,通过以下方式,可以轻松地将配置文件中key为
com.didispace.title
的配置信息加载到TestService中:
@Service
public class TestService {
@Value("${com.didispace.title}")
private String title;
}
虽然
@Value
注解在某些情况下非常方便实用,但为何不推荐普遍使用它呢?
核心原因是:当我们使用
@Value
直接提取配置信息使用时,会出现配置信息加载的碎片化
。同一个配置可能被多个Service或者Controller使用,当需要修改时,容易出现遗漏,难以维护这些配置加载而导致潜在问题。
如果不采用
@Value
,我们应该使用什么替代呢?
我建议使用
@ConfigurationProperties
来分类和加载各种配置信息。比如,当想加载关于
com.didispace
的相关配置时,可以创建以下实现:
@Configuration
@ConfigurationProperties(prefix = "com.didispace")
public class DidispaceProperties {
private String title;
}
这样的
DidispaceProperties
将会加载以
com.didispace
开头的配置。其他Service或者Controller要使用这些配置时,只需注入
DidispaceProperties
即可。若要修改配置相关的逻辑,只需修改
DidispaceProperties
中的内容,而不是到处寻找
@Value
的配置。
另外,还可以在这里增加对配置的校验。主要在pom.xml中引入
spring-boot-starter-validation
模块。然后修改配置类,增加
@Validated
注解和具体校验注解,比如:
@Validated
@Configuration
@ConfigurationProperties(prefix = "com.didispace")
public class DidispaceProperties {
@NotNull
private String title;
}
这样便轻松实现了配置的校验,极为方便实用。
以上就是今天的分享内容。如果您在学习过程中遇到困难,欢迎加入我们高质量的 Spring技术交流群 ,一同交流与讨论,更好的学习与进步!您也可以访问我们的 Spring Boot教程 获取更多内容。敬请收藏与转发支持!
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源