import java.lang.reflect.Method;
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 StudySpEL {
public static void main(String[] args) {
getStart();
parseContext();
regFunction();
}
public static void getStart()
{
// , ,
// , toParseString
//"welcome to el world + #name" , ,
// ,
final String toParseString = "'welcome to el world' + #name";
// ,spring SpelExpressionParser
ExpressionParser parser = new SpelExpressionParser();
// Expression
//Expression AST , :"'welcome to el world' + #name"
// welcome to el wolrd #name , EvaluationContext
Expression expression = parser.parseExpression(toParseString);
//EvaluationContext , Expression
// ( ) name everybody
EvaluationContext context = new StandardEvaluationContext();
context.setVariable("name", "everybody");
Object result = expression.getValue(context);
System.out.println(result);
}
/**
* spring @Value("#{T(Math).PI * 4^2}")
* #{} , ,spring
* ParserContext ParserContext.TEMPLATE_EXPRESSION
* #{ } , ParserContext
*/
public static void parseContext()
{
//SpEL + - * / ^ %
//SpEL java.lang
//T(Math).PI java.lang.Math PI
final String toParseString = "#{T(Math).PI * 4^2}";
ExpressionParser parser = new SpelExpressionParser();
// #{} ParserContext ,ParserContext.TEMPLATE_EXPRESSION
Expression expression = parser.parseExpression(toParseString, ParserContext.TEMPLATE_EXPRESSION);
Object value = expression.getValue(); //PI*16
System.out.println(value);
}
/**
* SpEL ,
*/
public static void regFunction()
{
final String toParseString = "#customerFunction(4,6)";
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression(toParseString);
StandardEvaluationContext context = new StandardEvaluationContext();
Method customerFuction = null;
try {
customerFuction = StudySpEL.class.getDeclaredMethod("customerFunction", int.class,int.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
//StandardEvaluationContext registerFunction , setVariable
//
context.registerFunction("customerFunction", customerFuction);
Integer value = expression.getValue(context, int.class);
System.out.println(value);
}
public static int customerFunction(int a,int b)
{
return a+b;
}
}
私たちは普段はあまり複雑な表現を使わないかもしれませんが、mybatisのMapperファイルというレベルのものを解析したいです.しかし、注解には表現を使うことができます.だから、少しのspringを知っているELはいつも悪くないです.