Spring Boot中@Value注解的使用与替代方案

@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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

热门手游下载