目錄
- 一、非配置文件注入
- 1、注入普通字符串
- 2、注入JAVA系統變量
- 3、注入表達式
- 4、注入其他Bean屬性
- 5、注入文件資源
- 6、注入URL資源
- 二、通過配置文件注入
- 1、注入普通字符串
- 2、注入基本類型
- 3、注入數組類型
- 4、注入List類型
- 5、注入Map類型
一、非配置文件注入
1、注入普通字符串
直接附在屬性名上,在 Bean 初始化時,會賦初始值。
@Value("admin")
private String name;
2、注入JAVA系統變量
@Value("#{systemProperties['os.name']}")
private String osName;
這里的 osName
是 JAVA 的 System.getProperties()
方法獲取的JAVA環境變量 ,查看java系統變量的方法如下:
public String getproperties() {//獲取所有的屬性Properties properties = System.getProperties();//為了看看系統的屬性有幾個,加了一個計數器//遍歷所有的屬性for (String key : properties.stringPropertyNames()) {System.out.println(key + "=" + properties.getProperty(key));}return null;
}
3、注入表達式
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber;
注:#{}
中寫表達式。
4、注入其他Bean屬性
注入 beanInject
對象的屬性 another
。
@Value("#{beanInject.another}")
private String fromAnotherBean;
5、注入文件資源
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile;
6、注入URL資源
@Value("http://www.baidu.com")
private Resource testUrl;
二、通過配置文件注入
SpringBoot
通過@Value
注解將配置文件中的屬性注入到容器內組件中(可用在@Controller
、@Service
、@Configuration
、@Component
等Spring托管的類中)
1、注入普通字符串
在 application.properties
配置文件中有如下配置:
name=admin
@Value
注入屬性:
@Value("${name}")
public String name;
此時,name
的值為 admin
。
當配置文件中 name=
空時,此時name屬性的值為 ""
。
我們可以為注入屬性設置默認值:
@Value("${name:admin}")
public String name;
2、注入基本類型
在 application.properties
配置文件中有如下配置:
port=8888
open=true
score=90.1
@Value
注入屬性:
@Value("${port:1111}")
private int port;@Value("${open:true}")
private boolean open;@Value("${score:100}")
private double score;
3、注入數組類型
在 application.properties
配置文件中有如下配置:
ids=1,2,3
@Value
注入屬性:
@Value("${ids}")
public int[] arrIds;
注:當配置文件中 ids
沒有對應值時,數組 arrIds
為 非null空數組
,長度為 0
。
4、注入List類型
在 application.properties
配置文件中有如下配置:
ids=1,2,3
@Value
注入屬性:
@Value("#{'${ids}'.split(',')}")
public List<String> listIds;
注:當配置文件中 ids
沒有對應值時,集合 listIds
長度為 1
,存在值為:""
。
5、注入Map類型
在 application.properties
配置文件中有如下配置:
user="{name:'admin', age:'23'}"
@Value
注入屬性:
@Value("#{${user}}")
public Map<String, String> userMap;
#{}
表示使用 SpEL表達式
。
注:當配置文件中 user
沒有對應值是,啟動報錯。