領先一步
VMware 提供培訓和認證,以加速您的進步。
瞭解更多Spring Framework 4.3.RC1 即將釋出,它帶來了一些不錯的核心容器改進,我們將在本文中探討...
考慮以下服務類
@Service
public class FooService {
private final FooRepository repository;
@Autowired
public FooService(FooRepository repository) {
this.repository = repository
}
}
這是一個非常常見的用例,但是如果您忘記在建構函式上使用 @Autowired
註解,容器將會丟擲一個異常,尋找一個預設的建構函式,除非您在 bean 定義設定中明確指定 autowire 模式 '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 消耗的值。在某些用例中,尤其是在啟動時,多個執行緒(即客戶端)可能會並行請求給定的鍵。同步快取支援是一個長期要求的特性,現在已經實現了。假設以下情況
@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
beanjavax.annotation.Resource.lookup()
@AliasFor
預設為宣告屬性的名稱@PropertySource
宣告@Scheduled
上)Spring Framework 4.3.0.RC1
預計於 3 月底釋出,GA 計劃於 5 月底釋出。如果您對這些功能感興趣,請儘早使用快照試用:最簡單的方法是在 https://start.spring.io 上使用 Spring Boot 1.4.0 (SNAPSHOT)
生成一個專案,其中包含當前的 Spring Framework 4.3 快照。