W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
您可以使用 @Value 注釋將配置值注入到 bean 中。
使用@Value 注解
考慮以下示例:
@Value Example
Java | Groovy | Kotlin |
|
|
|
@Value 注解接受一個(gè)可以嵌入占位符值的字符串(默認(rèn)值可以通過(guò)在冒號(hào) : 字符后指定一個(gè)值來(lái)提供)。還要盡量避免將成員可見(jiàn)性設(shè)置為私有,因?yàn)檫@需要 Micronaut 框架使用反射。更喜歡使用受保護(hù)的。
然后可以在代碼中使用注入的值。
請(qǐng)注意,@Value 也可用于注入靜態(tài)值。例如,以下注入數(shù)字 10:
Static @Value Example
@Value("10")
int number;
當(dāng)用于組合靜態(tài)內(nèi)容和占位符的注入值時(shí),這會(huì)更有用。例如設(shè)置一個(gè) URL:
Placeholders with @Value
@Value("http://${my.host}:${my.port}")
URL url;
在上面的示例中,URL 由配置中必須存在的兩個(gè)占位符屬性構(gòu)成:my.host 和 my.port。
請(qǐng)記住,要在占位符表達(dá)式中指定默認(rèn)值,請(qǐng)使用冒號(hào) : 字符。但是,如果您指定的默認(rèn)值包含冒號(hào),則必須使用反引號(hào)對(duì)值進(jìn)行轉(zhuǎn)義。例如:
Placeholders with @Value
@Value("${my.url:`http://foo.com`}")
URL url;
請(qǐng)注意,@Value 本身在屬性值占位符的解析方面沒(méi)有什么特別之處。
由于 Micronaut 對(duì)注釋元數(shù)據(jù)的廣泛支持,您可以在任何注釋上使用屬性占位符表達(dá)式。例如,要使 @Controller 的路徑可配置,您可以執(zhí)行以下操作:
@Controller("${hello.controller.path:/hello}")
class HelloController {
...
}
在上面的例子中,如果在配置中指定了 hello.controller.path,控制器將被映射到指定的路徑,否則它將被映射到 /hello。
您還可以使 @Client 的目標(biāo)服務(wù)器可配置(盡管服務(wù)發(fā)現(xiàn)方法通常更好),例如:
@Client("${my.server.url:`http://localhost:8080`}")
interface HelloClient {
...
}
在上面的示例中,屬性 my.server.url 可用于配置客戶(hù)端,否則客戶(hù)端會(huì)回退到本地主機(jī)地址。
使用@Property 注解
回想一下,@Value 注釋接收一個(gè) String 值,它可以是靜態(tài)內(nèi)容和占位符表達(dá)式的混合。如果您嘗試執(zhí)行以下操作,這可能會(huì)導(dǎo)致混淆:
Incorrect usage of @Value
@Value("my.url")
String url;
在上述情況下,文字字符串值 my.url 被注入并設(shè)置為 url 字段,而不是應(yīng)用程序配置中 my.url 屬性的值。這是因?yàn)锧Value 僅解析指定給它的值內(nèi)的占位符。
要注入特定的屬性名稱(chēng),您最好使用 @Property:
Using @Property
Java | Groovy | Kotlin |
|
|
|
my.engine.cylinders 屬性從配置中解析并注入到字段中。
受注入的字段不應(yīng)該是私有的,因?yàn)楸仨毷褂冒嘿F的反射
@Property注解用于通過(guò)setter注入
因?yàn)闊o(wú)法使用@Property 定義默認(rèn)值,如果該值不存在或無(wú)法轉(zhuǎn)換為所需的類(lèi)型,bean 實(shí)例化將失敗。
以上改為注入從應(yīng)用程序配置解析的 my.url 屬性的值。如果在配置中找不到該屬性,則會(huì)拋出異常。與其他類(lèi)型的注入一樣,注入點(diǎn)也可以用@Nullable注解,使注入成為可選的。
您還可以使用此功能來(lái)解析子映射。例如,考慮以下配置:
Properties | Yaml | Toml | Groovy | Hocon | JSON |
|
|
|
|
|
|
要解析僅包含以 hibernate 開(kāi)頭的屬性的扁平化映射,請(qǐng)使用 @Property,例如:
Using @Property
@Property(name = "jpa.default.properties")
Map<String, String> jpaProperties;
注入的映射將包含鍵 hibernate.hbm2ddl.auto 和 hibernate.show_sql 及其值。
@MapFormat 注釋可用于根據(jù)您想要嵌套鍵還是平面鍵來(lái)自定義注入的映射,并且它允許通過(guò) StringConvention 枚舉自定義鍵樣式。
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)系方式:
更多建議: