為什麼不推薦在Spring Boot中使用@Value載入配置

程序猿DD發表於2024-05-21

@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。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源

相關文章