SimpleEvaluationContext 배열 할당을 비활성화합니다

이 규칙은 org.springframework.expression.spel.support.SimpleEvaluationContext 다음 항목으로 바꾸십시오. Expression.getValue(...).

Spring 프레임워크 6.0, SimpleEvaluationContext 에서 배열 할당을 완전히 비활성화하도록 변경되었습니다 SpEL 표현식에서 배열 할당을 완전히 비활성화하여 표준 생성자 해결 동작과 일치하도록 변경되었습니다. 이 변경 사항은 다음을 사용하는 코드에 영향을 미칩니다 SimpleEvaluationContext SpEL 를 사용하여 명시적으로 배열을 생성하거나 변수를 매개변수로 사용하는 메서드( 를 호출하는 코드에 영향을 줍니다.

Spring 6으로 마이그레이션할 때 모든 호출을 다음 주소로 검토합니다 Expression.getValue(...) 여기서 SimpleEvaluationContext is used. 평가된 SpEL 표현식이 다음에서 지원되지 않는 기능에 의존하지 않는지 확인합니다 SimpleEvaluationContext와 같은 배열 생성 또는 varargs 메서드 호출과 같은

사용 사례에 SpEL 표현식에서 배열 생성 또는 varargs 메서드 호출이 필요한 경우, 다음 중 하나로 전환할 수 있습니다 에서 SimpleEvaluationContext - StandardEvaluationContext또는 SpEL 표현식을 리팩터링하여 이러한 구조를 완전히 피하세요.

다음 예는 플래그가 지정되는 사용법을 보여줍니다 SimpleEvaluationContext 가 전달되면 에 Expression.getValue(...). 동안 Spring 표현식은 지원되지 않는 배열 생성과 같은 기능으로 인해 실패할 수 있지만, 이 규칙은 표현식과 관계없이 컨텍스트 사용 자체에 플래그를 지정합니다 표현식과 관계없이 컨텍스트 사용 자체에 플래그를 지정합니다.


import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.SimpleEvaluationContext;
public class InvalidSpelArrayUsage {
    public void failAtRuntime() {
        SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
        ExpressionParser parser = new SpelExpressionParser();
        parser.parseExpression("new String[1]").getValue(context); // Should be flagged
        parser.parseExpression("join('a', 'b', 'c')").getValue(context); // Should be flagged
        }
    }

다음 예는 다음과 같은 경우에 유효한 사용법을 보여줍니다 StandardEvaluationContext 가 사용됩니다, 모든 SpEL 기능을 지원합니다.


import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class ValidSpelUsage {
    public void worksCorrectly() {
        StandardEvaluationContext context = new StandardEvaluationContext();
        ExpressionParser parser = new SpelExpressionParser();
        parser.parseExpression("new String[1]").getValue(context); // allowed
        parser.parseExpression("join('a', 'b', 'c')").getValue(context); //allowed
        }
    }

자세한 정보는 다음 자원을 참조하십시오.