• 为什么不推荐在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技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

    欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

  • 相关阅读:
    C与汇编深入分析
    【linux网络编程】一个bug
    adb shell input text 输入中文
    C#二叉树结构定义、添加节点值
    金蝶云星空与旺店通·企业奇门对接集成盘盈单查询打通创建盘点单
    关于app爬虫的环境准备
    SemanticKITTI点云标注工具
    硬核实力!飞凌 TI Sitara AM62X 系列-335x经典再续
    vue2与vue3生命周期的区别
    【重拾C语言】九、再论函数(指针、数组、结构体作参数;函数值返回指针、结构体;作用域)
  • 原文地址:https://www.cnblogs.com/didispace/p/18203977