SpEL表达式的使用

233 阅读1分钟

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);
    }
}