任何的表达式其组成之中一定会包含有相应的边界形式,例如:在jsp中的EL里面使用"${}",其中给定的"${"作为边界的开始,而"}"作为边界结束,而在Spring里面用户有需要也可以定义边界.首先来观察解析表达式的操作类: Expression parseExpression(String expressionString, ParserContext context) ;
其中给定的是org.springframework.expression.ParserContext就是由用户自己来设置边界符的.提供有如下方法
●是否使用此模版:public boolean isTemplate();
●边界开始符号public String getExpressionPrefix();
●边界结束符号public String getExpressionSuffix;
范例:定义自定义表达式边界
package cn.zwb.demo; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.ParserContext; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestELSimple { public static void main(String[] args) { //1.定义要操作的表达式,使用者更多多的是关注此部分,而不关注具体的解析处理部分, String pstr="#[1 + 2]"; //2.要定义一个表达式的解析器,本次使用的是spel表达式解析器; ExpressionParser parpser = new SpelExpressionParser(); //3.使用特定的解析器来处理指定的字符串操作; Expression exp = parpser.parseExpression(pstr,new ParserContext() { @Override public boolean isTemplate() { return true; } @Override public String getExpressionSuffix() { return "]"; } @Override public String getExpressionPrefix() { // TODO Auto-generated method stub return "#["; } }); //定义相关的一些环境属性, EvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue(context)); } }
此时在进行表达式解析的过程之中,所出现的边界都会自动的忽略掉;