hooyantsing's Blog

白银篇_P6_使用SpEL表达式绑定配置项

字数统计: 583阅读时长: 2 min
2020/07/18

使用SpEL表达式绑定配置项

20年全新-Spring Boot 2.x从青铜到王者之白银篇-打造精品中的精品-程序员-编程-架构师-SpringBoot

  • EL表达式 ${code}

用于加载外部属性文件中的值

  • SpEL表达式 #{code}

用于执行SpEL表达式,并将内容赋值给属性。

  • #{…} 和{…} 可以混合使用,但是必须#{}外面,{}在里面,#{ ‘${}’ } ,注意单引号,注意不能反过来
  • SpEL可以应用于XML文件或注解上。
  • SpEL可以读取程序运行所在系统的环境变量。获取当前用户的主工作目录。

    EL 全称 Expression Language

    SpEL 全称 Spring Expression Language

EL表达式只能识别 逗号 ,如果使用其他符号作为分割,将出现问题。

在这里,将应用SpEL表达式。04bc2d931eb0838ae9b90fa7f1a923a2.png

例:

首先,在 resources 目录下创建 employee.properties 文件。

employee.properties

1
2
3
employee.names=james|curry|zimug|姚明
employee.type=教练,球员,经理
employee.age={one:'27',two:'35',three:'34',four:'26'}

然后,创建一个 Employee.java 的实体类。

注意: 这里使用的是 @Configuration 注解,也可以使用 @Component 注解,目的是将类注入到 IOC 容器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package xyz.hooy.demo.model;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import java.util.List;
import java.util.Map;

@Data
@Configuration
@PropertySource(value = "classpath:employee.properties",encoding = "utf-8")
public class Employee {

// 获取数组列表的方法
// 这里的 '${employee.names}' 是先读取值,然后转换成字符串(String),再使用的 split() 方法
@Value("#{'${employee.names}'.split('\\|')}")
private List<String> employeeName;

// 取第一个元素
@Value("#{'${employee.names}'.split('\\|')[0]}")
private List<String> firstEmployeeName;

// 获取键值对的方法
@Value("#{${employee.age}}")
private Map<String, Integer> employeeAge;

// 取第二个元素
@Value("#{${employee.age}.two}")
// 另一种写法:@Value("#{${employee.age}['two']}")
private String employeeAgeTwo;

//默认值的方式
@Value("#{${employee.age}['five'] ?: 31 }")
private Integer ageWithDefaultValue;

//读取系统的环境变量
@Value("#{systemProperties['java.home']}")
private String javaHome;

//读取用户主目录
@Value("#{systemProperties['user.dir']}")
private String userDir;

}

最后,测试类验证。

1
2
3
4
@Test
public void valueBindTest(){
System.out.println(employee.toString());
}
CATALOG
  1. 1. 使用SpEL表达式绑定配置项