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