4.3.11 함수 by ks

표현 문자열에서 불러질 수 있는 함수를 커스텀해서 등록해서 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);

Last updated