任何的表达式其组成之中一定会包含有相应的边界形式,例如:在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));
}
}
此时在进行表达式解析的过程之中,所出现的边界都会自动的忽略掉;