一、非配置文件注入
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 没有对应值是,启动报错。
|