1.什么是SPEL表达式
spel表达式,全称spring表达式语言(spring express language)。是一个在Spring框架中使用的表达式语言,它可以在spring程序下构建复杂表达式、存取对象图属性、对象方法调用等等。
2.SpEL表达式的使用格式
SpEL的基本使用格式是 #{}
直接量表达式:
- 整数:#{8}
- 小数:#{8.8}
- 科学计数法:#{1e4}
- String:#{'string'}
- Boolean:#{true}
Java代码:
- #{"new Integer(1234)"}
运算符:
- 算术运算符:+,-,*,/,%,^
- 比较运算符:< , > , == , >= , <= , lt , gt , eg , le , ge
- 逻辑运算符:and , or , not , |
- 三目运算符:#{condition ? true : false}
- 正则表达式:#{admin.email matches ‘[a-zA-Z0-9._%±]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}’}
Class对象:
- T()----圆括号中要填入完整包名(除java.lang包下的类),该方法可以获得静态成员和方法;可以获得Class对象;也可以调用方法,并获得返回值。
bean对象:
- 其他bean对象:#{userService}
- 其他bean对象的属性:#{user.name}
- 其他bean对象的方法: #{user.getName()}
- 注意:对象必须被bean管理。注入对象时会自动创建对象,该对象会将首字母自动小写,使用时也需要小写User.class -> user.name。在对象名前可以加@,如#{@userService}
外部属性文件:
- #{"${ruiji.value}"}:可加载外部配置文件中的属性值
3.SpEL表达式的使用方法
3.1.注解上
SpEL表达式可以用在spring提供的任何注解上,但需要返回值相匹配。使用@Value()作为例子。
@SpringBootTest
class Tests {
@Value("#{1234}")
private int a;
@Test
public void main() {
System.out.println(a);
}
}
3.2.解析器实现
创建一个SpelExpressionParser解析器的对象,调用parseExpression()方法即可解析SpEL表达式,并返回解析内容。
@SpringBootTest
class Tests {
@Test
public void main() {
SpelExpressionParser parser = new SpelExpressionParser();
String value = parser.parseExpression("new String('hello world')").getValue(String.class);
System.out.println(value);
}
}