在Spring的工作开发中,我们经常使用的是 @Value
注解,来实现bean的属性注入,使用@Value注解总计有三种方式来注入值:
- 直接赋值
- EL表达式
- Properties配置
下面的代码展示了,这三种方式的使用示例
为了延时Properties的使用,这里需要创建一个简单的
.properties
配置文件,放置于resources目录下person.nickName=燕归来兮
在配置类上注入对象,添加Properties源类,注意,如果出现中文 乱码,可以使用
encoding = "UTF-8"
的形式指定编码@PropertySource(value = "classpath:/person.properties",encoding = "UTF-8")
创建一个Bean对象,下面以Person为演示对象,展示三种方式的使用
Person对象暂时未实现setter/getter 方法,请手动添加这些属性的的setter/getter方法
public class Person {
// 注入方式: Properties 注入
@Value("${person.name}")
private String name;
// 注入方式: Properties 注入
@Value("${person.nickName}")
private String nickName;
// 注入方式: EL 表达式注入
@Value("#{18 + 8 * 2 -9}")
private Integer age;
// 注入方式: 直接注入
@Value("安徽省芜湖市")
private String address;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", nickName='" + nickName + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
新增一个测试类
public class AnnotationConfigClassPath {
AnnotationConfigApplicationContext context;
@Before
public void init() {
// 指定配置类
context = new AnnotationConfigApplicationContext(MainConfig.class);
}
@Test
public void initComplete() {
// 输出注入的值
Person bean = context.getBean(Person.class);
System.out.println(bean);
// 从上下文环境中获取配置
String property = context.getEnvironment().getProperty("person.nickName");
System.out.println("Value = " + property);
}
}
输出结果:
Person{name='123', nickName='燕归来兮', age=25, address='安徽省芜湖市'}
Value = 燕归来兮