SpEl简单使用

本文介绍了Spring Expression Language(SpEL)的基本使用,包括如何创建解析器、解析表达式、设置上下文环境以及获取表达式值。通过示例展示了SpEL在获取类属性、调用方法及获取Spring容器bean中的应用。SpEL是一种强大且独立的表达式语言,常用于Spring框架中的表达式评估。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

获取类的值:

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

获取方法返回值:

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

获取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));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值