一、@Value 注解
@Value 注解支持以下几种赋值方式:
- 基本数值
- 支持 SpEl:#{}
- 可以取出配置文件中的值:${}
创建实体类 Person
package org.example.pojo;
import org.springframework.beans.factory.annotation.Value;
public class Person {
@Value("张三")
private String name;
@Value("#{20 - 2}")
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Person() {
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
配置类:
package org.example.config;
import org.example.pojo.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MainConfigOfPropertyValue {
@Bean
public Person person(){
return new Person();
}
}
测试代码:
@Test
public void testPropertyValue(){
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfigOfPropertyValue.class);
Object person = ac.getBean("person");
System.out.println(person);
}
测试结果:

二、使用 @PropertySource 加载外部配置文件
在 resources 目录下创建 person.properties
person.nickName=小张三
为实体类 Person 增加 nickName 属性,并增加 @Value 注解
package org.example.pojo;
import org.springframework.beans.factory.annotation.Value;
public class Person {
@Value("张三")
private String name;
@Value("#{20 - 2}")
private String age;
@Value("${person.nickName}")
private String nickName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Person() {
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
在配置类中,增加 @PropertySource 注解,引入外部配置文件,注意添加编码格式,否则会产生乱码问题.
package org.example.config;
import org.example.pojo.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@PropertySource(value = "classpath:person.properties", encoding = "UTF-8")
@Configuration
public class MainConfigOfPropertyValue {
@Bean
public Person person(){
return new Person();
}
}
测试方法不变,测试结果如下:

总结:
- @Value 可以为属性赋值,其支持三种方式赋值,一是一般赋值,即直接对属性赋值,二是支持 SpEl 表达式赋值,三是可以通过引入外部配置文件进行属性赋值,对于外部配置文件需先通过 @PropertySource 注解引入后,@Value 才能进行赋值。
- @PropertySource 类似于 Spring 配置文件中的 context:property-placeholder 标签:
<context:property-placeholder location="classpath:person.properties"></context:property-placeholder>
本文介绍了Spring框架中@Value和@PropertySource注解的使用方法,包括基本数值赋值、SpEL表达式赋值及从外部配置文件加载属性值等。展示了如何创建实体类并使用这些注解来注入属性。

被折叠的 条评论
为什么被折叠?



