SpringBoot 使用 @Value 为属性注入配置文件中的值

1,644 阅读1分钟

一、@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、注意

  1. 由于静态变量是属于类的,所以不能使用 this使用类名.静态变量名即可为该静态变量注入值。
  2. 静态变量其对应的 set 方法不能是静态的,否则会注入失败。