在Spring Boot中为什么不推荐使用@Value加载配置?

AI 概述
@Value注解相信很多 Spring Boot 的开发者都已经有接触了,通过使用该注解,我们可以快速的把配置信息加载到 Spring 的 Bean 中。 比如下面这样,就可以轻松的把配置文件中 key 为com.didispace.title配置信息加载到 TestService 中来使用。 @Service public class TestService { @Value("${com.didispac...

在 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来直接提取配置信息使用的时候,会产生配置信息加载的碎片化。比如,同一个配置,可能背多个 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 Boot 中为什么不推荐使用@Value加载配置的详细内容,更多请关注码云笔记其它相关文章!

以上关于在Spring Boot中为什么不推荐使用@Value加载配置?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 在Spring Boot中为什么不推荐使用@Value加载配置?

发表回复