복붙노트

[SPRING] 외부 조건을 가진 spring eventListener

SPRING

외부 조건을 가진 spring eventListener

내 코드 전체에 여러 EventListeners에 대한 FooEvents에 대한 유연한 필터가 필요합니다. @EventListener (condition = "event.enabled")를 사용할 수는 있지만 필자의 필터는 fooEvent의 여러 속성을 분석해야합니다.

내 응용 프로그램 컨텍스트에서 Predicate-Bean을 사용할 수 있기를 바랬습니다.

@Component
public class FooPredicate implements Predicate<FooEvent> {
   public boolean test(FooEvent event) {...}
}

...

@EventListener(condition="${fooPredicate.test(event)}")
public void handle(FooEvent event) { ... }

그러나 나는 얻는다 :

org.springframework.expression.spel.SpelEvaluationException: EL1011E: 
   Method call: Attempted to call method 
   test(org.springframework.context.PayloadApplicationEvent) on null 
   context object

EventListerns에 대해 외부의 복잡한 조건을 사용할 수 있습니까? 아니면 복잡한 조건을 가진 글로벌 리스너를 정의하고 전체 조건을 반복하지 않고 동작을 상속합니까?

해결법

  1. ==============================

    1.fooPredicate는 bean으로 해석하기 위해 '#'대신 '@'를 사용해야하는 스프링 빈이므로 잘못된 정의를 사용하고 있습니다. 10.5.13 빈 참조를 참조하십시오.

    fooPredicate는 bean으로 해석하기 위해 '#'대신 '@'를 사용해야하는 스프링 빈이므로 잘못된 정의를 사용하고 있습니다. 10.5.13 빈 참조를 참조하십시오.

    @EventListener(condition="@fooPredicate.test(#event)")
    public void handle(FooEvent event) {
        System.out.println();
    }
    
  2. from https://stackoverflow.com/questions/45123796/spring-eventlistener-with-external-condition by cc-by-sa and MIT license