写在前面
在之前的文章中,我们探讨了如何向Spring的IOC容器中注册bean组件,并且还讲解了有关bean组件的生命周期的知识。今天,我们就来一起聊聊@Value注解的用法。
@Value注解
Spring中的@Value注解可以为bean中的属性赋值。我们先来看看@Value注解的源码,如下所示。
从@Value注解的源码中我们可以看出,@Value注解可以标注在字段、方法、参数以及注解上,而且在程序运行期间生效。
@Value注解的用法
不通过配置文件注入属性的情况
通过@Value注解将外部的值动态注入到bean的属性中,一般有如下这几种情况:
-
注入普通字符串
@Value("李阿昀") private String name; // 注入普通字符串
-
注入操作系统属性
@Value("#{systemProperties['os.name']}") private String systemPropertiesName; // 注入操作系统属性
-
注入SpEL表达式结果
@Value("#{ T(java.lang.Math).random() * 100.0 }") private double randomNumber; //注入SpEL表达式结果
-
注入其他bean中属性的值
@Value("#{person.name}") private String username; // 注入其他bean中属性的值,即注入person对象的name属性中的值
-
注入文件资源
@Value("classpath:/config.properties") private Resource resourceFile; // 注入文件资源
-
注入URL资源
@Value("http://www.baidu.com") private Resource url; // 注入URL资源
通过配置文件注入属性的情况
首先,我们可以在项目的src/main/resources目录下新建一个属性文件,例如person.properties,其内容如下:
person.nickName=美美侠
然后,我们新建一个MainConfigOfPropertyValues配置类,并在该类上使用@PropertySource注解读取外部配置文件中的key/value并保存到运行的环境变量中。
package com.meimeixia.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.meimeixia.bean.Person;
@PropertySource(value={
"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
@Bean
public Person person() {
return new Person();
}
}
加载完外部的配置文件以后,接着我们就可以使用${key}
取出配置文件中key所对应的值,并将其注入到bean的属性中了。
package com.meimeixia.bean;
import org.springframework.beans.factory.annotation.Value;
public class Person {
@Value("李阿昀")
private String name;
@Value("#{20-2}")
private Integer age;
@Value("${person.nickName}")
private String nickName; // 昵称
public String getNickName() {
return nickName;
}
public void setNickName(String nickName