Spring @Value如何通過${}、#{}注入不同類型的值
Spring @Value通過${}、#{}注入不同類型值
@Value有兩種注入方式
@Value("${}"):自定義參數(shù)獲取,獲取對應(yīng)屬性文件(yml或properties文件)中自定義的屬性@Value("#{}"):SpEL表達式,獲取Bean的某個屬性或調(diào)用其某個方法,還可以表示常量
"${}"可以設(shè)置默認值,當從配置文件中獲取不到時,若沒有設(shè)置默認值,則會拋異常。
//在指定的配置路徑后面加冒號,在冒號后面給定默認值
@Value("${constants.test:hello}")
注意:
${}和#{}可以嵌套使用,但必須#{}外面,${}在里面,先會執(zhí)行${},因為spring執(zhí)行${}的時機要早于#{}。
不同類型注入
yml配置文件:
constants:
test:
string: test
integer: 3
list: a,b,c
other: a.b.c
map: "{key1:'var1', key2:'var2'}"
ps:以下所有類型注入都參考如上配置文件?。?!
String
@Value("${constants.test.string:test}")
private String value;
@Value("#{'test'}")
private String value;
Integer
@Value("${constants.test.integer:3}")
private Integer value;
@Value("#{3}")
private Integer value;
List
@Value("${constants.test.list:var1,var2,var3}")
private List<String> sList;
上面這種方式只能使用,逗號隔開,其他字符不會分割,不然會看成是一個整體的字符串
@Value("#{'${constants.test.other}'.split('.')}")
private List<String> sList;
#{}和${}嵌套使用,其中${constants.test.other}是一個String類型的Bean,split方法是用來分割字符串,.為指定的分割符,當然也可以換成其他字符,但一定要和${constants.test.other}配置的一致
Map
@Value("#{${constants.test.map}}")
private Map<String, Object> map;
注意上面的map解析中,一定要用"雙引號把map所對應(yīng)的constants.test.map的值包起來,要不然解析會失敗,導(dǎo)致不能轉(zhuǎn)成 Map。
異常信息:
Could not resolve placeholder 'constants.test.map' in value "#{${constants.test.map}}"
指定類型的Bean
@Configuration
public class Config {
@Bean("myRestTemplate")
public RestTemplate restTemplate() {
return new RestTemplateBuilder().build();
}
}
@Value("#{myRestTemplate}")
private RestTemplate restTemplate;
靜態(tài)屬性賦值
spring 不允許/不支持把值注入到靜態(tài)變量。
@Value("${constants.test.string}")
private static String value;
如上操作,最后變量value的結(jié)果是等于null值。
解決方法:
spring支持set方法注入,我們可以利用非靜態(tài)setter 方法注入靜態(tài)變量。
private static String value;
@Value("${constants.test.string}")
public void setValue(String value) {
this.value = value;
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
struts2簡介_動力節(jié)點Java學(xué)院整理
Struts2框架是MVC流程框架,適合分層開發(fā),這篇文章主要為大家詳細介紹了struts2簡介的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
controller函數(shù)中參數(shù)列表使用多個@RequestBody問題
這篇文章主要介紹了controller函數(shù)中參數(shù)列表使用多個@RequestBody問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Java HashSet(散列集),HashMap(散列映射)的簡單介紹
這篇文章主要介紹了Java HashSet(散列集),HashMap(散列映射)的簡單介紹,幫助大家更好的理解和學(xué)習(xí)Java集合框架的相關(guān)知識,感興趣的朋友可以了解下2021-01-01
spring?boot?Slf4j日志框架的體系結(jié)構(gòu)詳解
在項目開發(fā)中記錄日志是必做的一件事情,springboot內(nèi)置了slf4j日志框架,下面這篇文章主要給大家介紹了關(guān)于spring?boot?Slf4j日志框架的體系結(jié)構(gòu),需要的朋友可以參考下2022-05-05

