Spring EL 表达式使用
最简单的使用
代码语言:text复制ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("'hello'");
String value = expression.getValue(String.class);
System.out.println(value);
注意:字面常量要用 '' 包含起来,不然会被当做变量解析。
获取字段属性值
代码语言:java复制@Component
public class Constant {
public String getTest(){
return "test";
}
public static final String HEI_HEI = "hei";
public static final Test1 test1 = new Test1();
public static class Test1{
public static final String HEI_HEI = "hei";
}
}
@Value("#{constant.HEI_HEI}")
private String index;
@Value("#{constant.test1.HEI_HEI}")
private String index;
如果想在 Spring 中注入类的字段值,需要将类注册到 Spring 的 IOC 容器当中。注入方式为 BeanName.属性名称。当然也可以调用 Bean 的方式,使用 BeanName.方法名称。@Value("#{constant.getTest}")
。
指定 Null 行为
在嵌套调用属性的时候,如果前一个属性为 null,则会出现空指针异常,为了避免这种情况,我们可以指定如果是 null 的话不抛异常执行返回 null。
代码语言:java复制SpelParserConfiguration config = new SpelParserConfiguration(true, true);
ExpressionParser expressionParser = new SpelExpressionParser(config);
Expression expression = expressionParser.parseExpression("test2.name");
Test1 test1 = new Test1();
// test1.setTest2(new Test2("466"));
System.out.println(expression.getValue(test1));
@Data
public static class Test1{
private Test2 test2;
}
@Data
@AllArgsConstructor
public static class Test2{
private String name;
}
获取数组和集合
代码语言:text复制 List<Integer> list = new ArrayList<>();
list.add(1);
Integer[] array = {2};
ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("[0]");
System.out.println(expression.getValue(list));
Expression expression1 = expressionParser.parseExpression("[0]");
System.out.println(expression1.getValue(array));
如果是在 Spring 当中,则通过以下方式获取:
代码语言:text复制@Component
public class Constant {
public Integer[] arr = {1,2,3};
}
@Value("#{constant.arr[0]}")
private String index;
集合也是一样的获取方式。
获取 Map 类型数据
代码语言:text复制Map<String,String> map = new HashMap<>();
map.put("name","haha");
ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("['name']");
System.out.println(expression.getValue(map));
获取 Properties 文件当中的属性。
代码语言:text复制@Value("${server.port}")
在 xml 中,可能一些标识符是特殊字符,以下关键字可以做为替换:
代码语言:scss复制lt (<)
gt (>)
le (<=)
ge (>=)
eq (==)
ne (!=)
div (/)
mod (%)
not (!).
and (&&)
or (||)
not (!)
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!