为什么不推荐在Spring Boot中利用@Value加载设置

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

@Value注解信赖很多Spring Boot的开辟者都已经有打仗了,通过利用该注解,我们可以快速的把设置信息加载到Spring的Bean中。
比如下面这样,就可以轻松的把设置文件中key为com.didispace.title设置信息加载到TestService中来利用
  1. @Service
  2. public class TestService {
  3.    
  4.     @Value("${com.didispace.title}")
  5.     private String title;
  6. }
复制代码
这个注解可以说非常的好用!但是为什么不推荐大家利用它呢?核心原因是:当我们利用@Value来直接提取设置信息利用的时候,会产生设置信息加载的碎片化。比如,同一个设置,大概背多个Service或者Controller利用,当我们再要修改它的时候,就会存在一个遗漏的风险。我们无法方便的维护这些设置加载而导致一些问题。
那么,假如不利用@Value,我们应该用什么来替代呢?
我比较推荐的就是利用@ConfigurationProperties来分类和加载各种设置信息,比如,我要加载关于com.didispace的相关设置时候,就写一个这样的实现:
  1. @Configuration
  2. @ConfigurationProperties(prefix = "com.didispace")
  3. public class DidispaceProperties {
  4.     private String title;
  5. }
复制代码
这个DidispaceProperties就会加载com.didispace开头的设置。其他Service或者Controller要利用这些设置的时候,就通过注入DidispaceProperties就也可以了。假如要修改设置相关的逻辑,也只须要修改DidispaceProperties中的内容即可,而不是到处找@Value的设置。
另外,在这里,其实还可以增长对设置的校验,主要在pom.xml中引入spring-boot-starter-validation模块。然后修改设置类,增长@Validated注解和具体校验注解,比如:
  1. @Validated
  2. @Configuration
  3. @ConfigurationProperties(prefix = "com.didispace")
  4. public class DidispaceProperties {
  5.   @NotNull
  6.   private String title;
  7. }
复制代码
这就轻松实现设置的校验了,是不是很方便呢?
今天的分享就到这里。假如您学习过程中如遇困难?可以加入我们超高质量的Spring技术交换群,到场交换与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!
欢迎关注我的公众号:步调猿DD。第一时间相识前沿行业消息、分享深度技术干货、获取优质学习资源

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表