領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多Spring Framework 4.3.RC1 即將釋出,帶來了許多核心容器的改進,我們將在本文中一一探討……
考慮以下服務類
@Service
public class FooService {
private final FooRepository repository;
@Autowired
public FooService(FooRepository repository) {
this.repository = repository
}
}
這是一個非常常見的用例,但如果您忘記在建構函式上新增 @Autowired 註解,容器將丟擲異常,尋找一個預設建構函式,除非您在 bean 定義設定中(例如,在 XML <bean> 中)明確指示了自動裝配模式為“constructor”。
因此,從 4.3 版本開始,您不再需要在這種單建構函式場景下指定顯式的注入註解。這對於那些通常不包含任何容器註解的類來說尤其優雅,例如在以程式設計方式註冊時。
public class FooService {
private final FooRepository repository;
public FooService(FooRepository repository) {
this.repository = repository
}
}
同樣,您可能已經注意到 @Configuration 類在歷史上不支援建構函式注入。從 4.3 版本開始,它們現在支援了,並且在單建構函式場景下同樣允許省略 @Autowired……
@Configuration
public class FooConfiguration {
private final FooRepository repository;
public FooConfiguration(FooRepository repository) {
this.repository = repository
}
@Bean
public FooService fooService() {
return new FooService(this.repository);
}
}
Spring Framework 4.3 還引入了 ObjectProvider,它是現有 ObjectFactory 介面的擴充套件,提供了一些便捷的簽名,如 getIfAvailable 和 getIfUnique,用於僅在 bean 確實存在(可選支援)或可以確定單個候選(特別是在有多個匹配 bean 時,一個主候選)時檢索 bean。
@Service
public class FooService {
private final FooRepository repository;
public FooService(ObjectProvider<FooRepository> repositoryProvider) {
this.repository = repositoryProvider.getIfUnique();
}
}
您可以將此 ObjectProvider 控制代碼用於初始化期間的自定義解析目的(如上所示),或者將其控制代碼儲存在欄位中以供以後按需解析(就像您通常使用 ObjectFactory 一樣)。
快取抽象主要用於快取 CPU 和/或 IO 消耗大的值。在某些用例中,一個給定的鍵可能會被多個執行緒(即客戶端)並行請求,尤其是在啟動時。同步快取支援是一個長期以來一直被要求的功能,現在已經實現。假設以下示例
@Service
public class FooService {
@Cacheable(cacheNames = "foos", sync = true)
public Foo getFoo(String id) { ... }
}
注意 sync = true 屬性,它會告訴框架在計算值期間阻止任何併發執行緒。在併發訪問的情況下,這將確保此密集操作僅被呼叫一次。
順便說一句,Spring Framework 4.3 現在支援 Caffeine,它是 Guava 快取的一個 Java 8 重寫版本,旨在取代 Spring Framework 5 中的 Guava 支援。
還有一些其他的核心改進,其中一些是長期以來備受期待的
Collection/Map beanjavax.annotation.Resource.lookup()@AliasFor 預設使用宣告屬性的名稱@PropertySource 宣告提供自定義編碼支援@Scheduled 上)Spring Framework 4.3.0.RC1 預計在三月下旬釋出,GA 版本計劃在五月底釋出。如果您對這些功能感興趣,請儘快嘗試使用快照版本:最簡單的方法是在 https://start.spring.io 上生成一個專案,使用 Spring Boot 1.4.0 (SNAPSHOT),這將帶來當前的 Spring Framework 4.3 快照。