不一样的 Spring EL 表达式使用

2023-11-28 15:37:53 浏览数 (1)

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞