一、@Value 注解的作用
使用 @Value 注解,可以为属性注入全局配置文件中的值。
@Value 相当于 Spring 框架配置文件注入值:
<bean class="Demo">
<property name="lastname" value="字面量/ #{Spring 表达式} / ${key}"/>
</bean>
二、使用 @Value 为普通成员变量注入值
就像 Spring 框架配置文件注入值一样,@Value 也可以使用三种形式注入值。
1、字面量
(1)语法
在需要注入值的属性上加上如下内容:
@Value("字面量")
(2)举例
@Component
public class Demo {
@Value("5000")
private Double salary;
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
此时属性salary 的值就为 5000。
2、Spring 表达式(SpEL)
(1)语法
在需要注入值的属性上加上如下内容:
@Value("#{Spring表达式}")
(2)举例
@Component
public class Demo {
@Value("#{10*2}")
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Double age) {
this.age= age;
}
}
此时属性 age 的值就为 20。
3、Spring全局配置文件的 key 值
application.properties
demo.last-name=lisi
在 @Value 写入 ${key} 即可获取全局配置文件对应的值。
@Component
public class Demo {
@Value("${demo.last-name}")
private String lastName;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
此时属性 lastName 的值就为 lisi。
三、使用 @Value 为静态变量注入值
1、举例
与普通成员变量不同,如果想要为类的静态变量注入值,则需要将 @Value 注解放在该属性对应的 set 方法上,比如:
application.properties
config=test
@Component
public class Demo {
private static String config;
@Value("${config}")
public void setConfig(String config) {
Demo.config = config;
}
}
2、注意
- 由于静态变量是属于类的,所以不能使用 this,使用类名.静态变量名即可为该静态变量注入值。
- 静态变量其对应的 set 方法不能是静态的,否则会注入失败。