您的位置:首页 > 编程语言 > Java开发

Spring 与属性赋值相关的注解之 @Value/@PropertySources/@PropertySource

2019-04-15 16:35 579 查看
前言:

前面已经总结了 Spring 与组件注入相关的注解,现在总结一些 Spring 与属性赋值相关的注解。

准备工作:
  1. 以前在 xml 配置文件中对对象进行赋值是通过如下形式:
<bean id="person" class="com.uestc.auto.xiaoxie.bean.Person">
<property name="age" value="23"></property>
<property name="name" value="Karolina"></property>
</bean>

当然,上面的例子是最简单的一种使用方式。除了这种基本数据(数字/字符串)之外,value 属性处还可以用 SpEL 表达式或者从配置文件中读取内容。而 Spring 注解可以完成同样的工作。

  1. 改下之前的 Person 类,多加一个 private String email 属性。顺便修改下 setter/getter/toString 方法等等。
  2. 在 src/main/resources 下添加一个 person.properties 文件(待会儿就是要读取这个文件中的值的),内容如下:
person.email=xxx@qq.com
实验:
  1. 利用 @Value 注解进行属性的赋值:
package com.uestc.auto.xiaoxie.bean;

import org.springframework.beans.factory.annotation.Value;

public class Person {

@Value("Adriana") // 传入基本数据(数字/字符串)
private String name;

@Value("#{19 + 18}") // 用 SpEL 表达式进行赋值
private int age;

@Value("${person.email}") // 从配置文件中读取值
private String email;

public Person() {
super();
}

public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}

// 由于篇幅原因,省略 setter getter 的定义

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", email=" + email + "]";
}
}
  1. 定义配置类,在配置类上添加 @PropertySource 注解,读取 person.properties 文件中的内容。
    和 @ComponentScan 注解一样,这也是一个可重复注解,即我们可以用 @PropertySources 包裹多个 @PropertySource。
@PropertySource(value={"classpath:/person.properties"}) // 注意,自己的配置文件的路径
@Configuration
public class SpringConfig3 {

@Bean
public Person person(){
return new Person();
}
}
@PropertySource(value={"classpath:/person.properties"}) 就等价于之前在 xml 配置文件中的 <context:property-placeholder location="classpath:/person.properties"/>
  1. 编写单元测试方法:
    (略去了 AnnotationConfigApplicationContext 的创建)
@Test
public void test1(){
Person person = context.getBean(Person.class);
System.out.println(person);
}

之前也说过,配置文件中的内容能够从当前环境中获取,所以不用 @Value 注解也能读取配置文件中的内容:

@Test
public void test2(){
ConfigurableEnvironment environment = context.getEnvironment();
String email = environment.getProperty("person.email");
System.out.println(email);
}
  1. 测试结果如下所示:
Person [name=Adriana, age=37, email=xxx@qq.com]
xxx@qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐