• SpEl简单使用


    SpEl: spring expression language : spring 表达式语言,是一种强大的表达式语言

    虽然 SpEl 是 spring 产品组合中表达式评估的基础,但它不直接与 spring绑定,可以独立使用

    1.创建SpelExpressionParser 解析器
    2. 解析表达式 获取 Expression 对象
    3. 设置上下文环境 StandardEvaluationContext
    4. 获取值

    在这里插入图片描述

    代码:

        // eval 执行一个表达式   javascript
            String expl  = "1+2";
            SpelExpressionParser spelExpressionParser = new SpelExpressionParser();
            Expression expression = spelExpressionParser.parseExpression(expl);
            // 获取表达式运行结果
            Object value = expression.getValue();
            System.out.println("value = " + value);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    获取类的值:

       User user = new User(1, "waterkid", "beijing");
    
            String spel = "#user.address";
            SpelExpressionParser parser = new SpelExpressionParser();
            Expression expression = parser.parseExpression(spel);
            // 让 解析器 知道  将user解析到 表达式中
            StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext();
            standardEvaluationContext.setVariable("user",user);
            Object value = expression.getValue(standardEvaluationContext);
            // 根据这个 环境 去获取 user 的值
            System.out.println("value = " + value);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
      User user = new User(1, "waterkid", "beijing");
            String spel = "address";
            SpelExpressionParser parser = new SpelExpressionParser();
            Expression expression = parser.parseExpression(spel);
            StandardEvaluationContext context = new StandardEvaluationContext();
            context.setRootObject(user);
            System.out.println(expression.getValue(context));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
      User user = new User(1, "waterkid", "beijing");
            SpelExpressionParser parser = new SpelExpressionParser();
            String name = parser.parseExpression("username").getValue(new StandardEvaluationContext(), user, String.class);
            System.out.println("name = " + name);
    
    • 1
    • 2
    • 3
    • 4

    获取方法返回值:

      String spel = "#userService.sayHello('silly b')";
            SpelExpressionParser parser = new SpelExpressionParser();
            Expression expression = parser.parseExpression(spel);
            StandardEvaluationContext context = new StandardEvaluationContext();
            context.setVariable("userService",new UserService());
            System.out.println("-------");
            Object value = expression.getValue(context);
            System.out.println("value = " + value);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获取spring容器bean:如果 评估上下文 已经配置了 bean的解析器,可以使用@符号从表达式中查找 bean

    // spring 中  BeanFactory 可以直接引入
       @Autowired
        BeanFactory beanFactory;
        
        @Test
        public void test03(){
            String spel = "@userService.sayHello('silly b')";
            SpelExpressionParser parser = new SpelExpressionParser();
            Expression expression = parser.parseExpression(spel);
            StandardEvaluationContext context = new StandardEvaluationContext();
            // 解析 bean
            context.setBeanResolver(new BeanFactoryResolver(beanFactory));
            System.out.println(expression.getValue(context));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    正点原子嵌入式linux驱动开发——Linux并发与竞争
    多维时序 | MATLAB实现SSA-CNN-LSTM-Attention多变量时间序列预测(SE注意力机制)
    代码最佳实践和指南(二)
    爬虫 - CSS表达式
    操作系统的运行机制
    反向传播back propagation
    飞行汽车飞行控制系统功能详解
    【论文阅读】RadHAR:通过毫米波雷达生成的点云识别人类活动
    21天学习挑战赛-静态链表以及一个带头结点的 线性链表类型 的定义
    太强了!腾讯T14级大牛撰写的分布式数据库架构实践手册,GitHub上传疯了!
  • 原文地址:https://blog.csdn.net/qq_36022463/article/details/126194919