표현 문자열에서 불러질 수 있는 함수를 커스텀해서 등록해서 SpEL을 확장할 수 있다. 함수는 EvaluationContext를 통해 등록이 된다. 아래는 어떻게 커스텀한 함수를 등록하는지 보여준다.
Method method = ...;
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
context.setVariable("myFunction", method);
예를 들어서, 문자열을 역전시킨 아래 유틸리티 메소드를 고려해보자.
public abstract class StringUtils {
public static String reverseString(String input) {
StringBuilder backwards = new StringBuilder(input.length());
for (int i = 0; i < input.length(); i++)
backwards.append(input.charAt(input.length() - 1 - i));
}
return backwards.toString();
}
}
그리고나서 등록하고 사용할 수 있다.
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
context.setVariable("reverseString",
StringUtils.class.getDeclaredMethod("reverseString", String.class));
String helloWorldReversed = parser.parseExpression(
"#reverseString('hello')").getValue(context, String.class);