W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
除了能夠注入 bean 之外,Micronaut 原生支持注入以下類型:
類型 | 描述 | 示例 |
---|---|---|
bean 的 Optional。如果 bean 不存在,則注入 empty() |
|
|
集合或集合的子類型(例如列表、集合等) |
|
|
A lazy |
|
|
給定類型的原生 bean 數組 |
|
|
一個 javax.inject.Provider 如果循環(huán)依賴需要它,或者為每個 get 調用實例化一個原型。 |
|
|
一個 jakarta.inject.Provider 如果循環(huán)依賴需要它或者為每個 get 調用實例化一個原型。 |
|
|
一個 io.micronaut.context.BeanProvider(如果循環(huán)依賴需要它或為每個 get 調用實例化一個原型)。 |
|
支持 3 種不同的提供程序類型,但是 BeanProvider 是我們建議使用的一種。
當將 java.lang.Collection 或 java.util.stream.Stream,bean 數組注入到與注入類型匹配的 bean 中時,擁有的 bean 將不是注入集合的成員。證明這一點的常見模式是聚合。例如:
@Singleton
class AggregateEngine implements Engine {
@Inject
List<Engine> engines;
@Override
public void start() {
engines.forEach(Engine::start);
}
...
}
在此示例中,注入的成員變量 engines 將不包含 AggregateEngine 的實例
一個原型 bean 將在每個注入 bean 的地方創(chuàng)建一個實例。當原型 bean 作為提供者注入時,每次調用 get() 都會創(chuàng)建一個新實例。
注入一組 bean 時,默認情況下它們是不排序的。實現(xiàn) Ordered 接口以注入有序集合。如果請求的 bean 類型沒有實現(xiàn) Ordered,Micronaut 會在 bean 上搜索 @Order 注釋。
@Order 注釋對于訂購由工廠創(chuàng)建的 bean 特別有用,其中 bean 類型是第三方庫中的類。在這個例子中,LowRateLimit 和 HighRateLimit 都實現(xiàn)了 RateLimit 接口。
帶有@Order 的工廠
Java | Groovy | Kotlin |
|
|
|
當從上下文中請求一組 RateLimit bean 時,它們將根據注釋中的值按升序返回。
按順序注入 Bean
當注入單個 bean 實例時,@Order 注釋也可用于定義哪個 bean 具有最高優(yōu)先級,因此應該被注入。
選擇單個實例時不考慮 Ordered 接口,因為這需要實例化 bean 來解析訂單。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: