不一样的 Spring EL 表达式使用

·  阅读 12

Spring EL 表达式使用

最简单的使用

ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("'hello'");
String value = expression.getValue(String.class);
System.out.println(value);
复制代码

注意:字面常量要用 '' 包含起来,不然会被当做变量解析。

获取字段属性值

@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。

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;
    }
复制代码

获取数组和集合

 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 当中,则通过以下方式获取:

@Component
public class Constant {
   public Integer[] arr = {1,2,3};
}

@Value("#{constant.arr[0]}")
    private String index;
复制代码

集合也是一样的获取方式。

获取 Map 类型数据

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 文件当中的属性。

@Value("${server.port}")
复制代码

在 xml 中,可能一些标识符是特殊字符,以下关键字可以做为替换:

lt (<)

gt (>)

le (<=)

ge (>=)

eq (==)

ne (!=)

div (/)

mod (%)

not (!).

and (&&)

or (||)

not (!)
复制代码
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改