0%

使用Spel表达式

使用Spel表达式

前两天在完成一个需求的时候需要读取对象中某注解内的表达式来进行解析,其实两个反射可以解决这个问题。突然想到spring中spel表达式不就是用来解析表达式的吗?干脆用spel表达式来进行解析吧。

先说明一下我这种场景使用的是模板表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 创建解析器
ExpressionParser parser = new SpelExpressionParser();
// 创建解析器上下文
ParserContext parserContext = new TemplateParserContext("${","}");
// 创建表达式计算上下文
EvaluationContext context = new StandardEvaluationContext();
// 注册自定义变量
for(Map.Entry<String,String> entry : variables.entrySet()){
context.setVariable(entry.getKey(),entry.getValue());
}
// 这里的v是读取到的我注解中的表达式 媒体名称 ${#mediaName}
// 在上面设置的自定义变量中是有mediaName的值的
// 表达式中使用"#variableName"引用
Expression expression = parser.parseExpression(v,parserContext);
// 获取解析完之后的内容,会将${#mediaName}替换为变量中的值
expression.getValue(context,String.class)

当然Spel的强大远不止于此,只不过我目前只用到了模板表达式,后续如果用到别的在进行补充

欢迎关注我的其它发布渠道