@Value 注解可以为属性值赋值,赋值的方式有多种。
分别举例说明:
基于数值
基于数值的话,最简单。只需要把值写入@Value 注解即可:
@Value(“ 张三”)
private String userName;
基于 SpEL
基于 SpEL 表达式也很简单,只需要写 SpEL 表达式,可以参考 Spring Expression Language(SpEL)速查指南
如:
@Value("#{30-2}")
private Integer age;基于配置文件
第一步先指定配置文件,通过 PropertySource 注解指定路径。所谓的配置文件,就是存放键值对的 properties 文件。
@Component
@PropertySource(value = {
"classpath:/mine.properties"}
)
public class User {
@Value("${u.name}")
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}配置文件放在/src/main/resources/mine.properties 这个路径下:
u.name=zhangsan
u.age=29 注意:所谓的配置参数的值,都是在环境变量中,可以从环境变量中读取到该值。
public class Main {
public static void main(String[] args) {
// 使用Config.class这个配置类
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
User user = (User) applicationContext.getBean("user");
System.out.println(user.getUserName());
ConfigurableEnvironment environment = applicationContext.getEnvironment();
System.out.println(environment.getProperty("u.name")); //读取环境变量的值
applicationContext.close();
}
}输出如下:
zhangsan
zhangsan因此,除了注入 property 文件中设置的值,还可以注入环境变量中的值。
比如:
@Value("${user.name}")
private String userName;这个${user.name} 注入的是环境变量中的值
Administrator静态变量注入值
@Component
@PropertySource(value = { "classpath:/mine.properties" })
public class User {
@Value("${u.staticString}")
public static String staticString;
}配置文件中
u.staticString=this is a staticStringMain 方法
public class Main {
public static void main(String[] args) {
// 使用Config.class这个配置类
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
System.out.println(User.staticString);
applicationContext.close();
}
}输出:
null原因在于,Spring 不允许将值直接注入给静态变量 ,只能使用变通的方法:
@Component
@PropertySource(value = { "classpath:/mine.properties" })
public class User {
public static String staticString;
@Value("${u.staticString}")
public void setStaticString(String staticString) {
System.out.println("inject staticString....");
User.staticString = staticString;
}
}输出:
inject staticString....
this is a staticString