領先一步
VMware 提供培訓和認證,以加速您的進展。
瞭解更多Spring Framework 4.3.RC1 即將推出,並帶來一些不錯的核心容器改進,我們將在這篇文章中探討...
考慮以下服務類別
@Service
public class FooService {
private final FooRepository repository;
@Autowired
public FooService(FooRepository repository) {
this.repository = repository
}
}
這是一個相當常見的用例,但是如果您忘記在建構子上加上 @Autowired
註解,容器將會拋出一個例外,尋找預設建構子,除非您在 Bean 定義設定中明確指示自動注入模式 'constructor' (例如在 XML <bean>
中)。
因此,從 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 的值。 在某些用例中,給定的 key 可能會被多個執行緒 (即客戶端) 並行請求,尤其是在啟動時。 同步快取支援是一個長期要求的特性,現在已經實現。 假設以下情況
@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 中的 Spring Guava 支援。
還有一些其他的核心改進,其中一些是長期以來所期望的
Collection
/Map
Beansjavax.annotation.Resource.lookup()
@AliasFor
預設為宣告屬性的名稱@PropertySource
宣告提供自定義編碼支援@Scheduled
上)Spring Framework 4.3.0.RC1
預計將於 3 月下旬推出,GA 計劃於 5 月底推出。 如果您對這些功能感興趣,請使用快照盡早嘗試:最簡單的方法是使用 Spring Boot 1.4.0 (SNAPSHOT)
在 https://start.spring.io 上生成一個專案,同時引入當前的 Spring Framework 4.3 快照。