|
| 1 | +package com.design.interpreter; |
| 2 | + |
| 3 | +import org.springframework.expression.EvaluationContext; |
| 4 | +import org.springframework.expression.Expression; |
| 5 | +import org.springframework.expression.ExpressionParser; |
| 6 | +import org.springframework.expression.spel.standard.SpelExpressionParser; |
| 7 | +import org.springframework.expression.spel.support.StandardEvaluationContext; |
| 8 | + |
| 9 | +import java.util.ArrayList; |
| 10 | +import java.util.List; |
| 11 | + |
| 12 | +/** |
| 13 | + * 解释器模式 - 可利用场景比较少 |
| 14 | + * 可以直接使用Spring及Java自带的 |
| 15 | + * |
| 16 | + * @author wliduo[i@dolyw.com] |
| 17 | + * @date 2023/2/2 16:22 |
| 18 | + */ |
| 19 | +public class Main { |
| 20 | + |
| 21 | + public static void main(String[] args) { |
| 22 | + // 创建一个ExpressionParser对象,用于解析表达式 |
| 23 | + ExpressionParser parser = new SpelExpressionParser(); |
| 24 | + // 最简单的字符串表达式 |
| 25 | + Expression exp = parser.parseExpression("'HelloWorld'"); |
| 26 | + System.out.println("'HelloWorld'的结果:" + exp.getValue()); |
| 27 | + // 调用方法的表达式 |
| 28 | + exp = parser.parseExpression("'HelloWorld'.concat('!')"); |
| 29 | + System.out.println("'HelloWorld'.concat('!')的结果: " + exp.getValue()); |
| 30 | + // 调用对象的getter方法 |
| 31 | + exp = parser.parseExpression("'HelloWorld'.bytes"); |
| 32 | + System.out.println("'HelloWorld'.bytes的结果: " + exp.getValue()); |
| 33 | + // 访问对象的属性(相当于HelloWorld.getBytes().length) |
| 34 | + exp = parser.parseExpression("'HelloWorld'.bytes.length"); |
| 35 | + System.out.println("'HelloWorld'.bytes.length的结果:" + exp.getValue()); |
| 36 | + // 使用构造器来创建对象 |
| 37 | + exp = parser.parseExpression("new String('helloworld')" + ".toUpperCase()"); |
| 38 | + System.out.println("new String('helloworld')" + ".toUpperCase()的结果是: " + exp.getValue(String.class)); |
| 39 | + // List解释 |
| 40 | + List<Boolean> list = new ArrayList<>(); |
| 41 | + list.add(true); |
| 42 | + EvaluationContext ctx2 = new StandardEvaluationContext(); |
| 43 | + // 将list设置成EvaluationContext的一个变量 |
| 44 | + ctx2.setVariable("list", list); |
| 45 | + // 修改list变量的第一个元素的值 |
| 46 | + parser.parseExpression("#list[0]").setValue(ctx2, "false"); |
| 47 | + // list集合的第一个元素被改变 |
| 48 | + System.out.println("list集合的第一个元素为:" + parser.parseExpression("#list[0]").getValue(ctx2)); |
| 49 | + } |
| 50 | + |
| 51 | +} |
0 commit comments