Как написать функцию для фильтрации событий в Spring Application Event - PullRequest
0 голосов
/ 18 марта 2020

Предположим, у меня есть издатель

@Data
public class FooEvent {
  String name;
}

@Component
public class FooPublisher {
  @Autowired
  ApplicationEventPublisher publisher;

  public void myBusinessFunction() {
    ...doSomething...
    publisher.publishEvent(new FooEvent("fooName");
  }
}

Теперь я хочу создать EventListener для этого события

@Component
public class MyEventListener {
  @EventListener(condition = "filter(event.name)")
  public void handleFoo(FooEvent event) {
    sout(event);
  }

  public boolean filter(String name) {
    return name.equals("test");
  }
}

Мой EventListener хочет иметь собственный фильтр с функцией внутри моего MyEventListener.

Конечно, эта функция не работает из-за condition = "filter(event.name)"

Как я могу написать собственный фильтр в состоянии @EventListener?

1 Ответ

0 голосов
/ 05 апреля 2020

Я нашел, как справиться с этим, EventListener SpEl поддерживает распознаватель бинов, чтобы мы могли использовать все бины в ApplicationContext

@Component("beanName")
public class MyEventListener {
  @EventListener(condition = "@beanName.filter(event.name)")
  public void handleFoo(FooEvent event) {
    sout(event);
  }

  public boolean filter(String name) {
    return name.equals("test");
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...