我尝试使用Spring @EventListener发布和处理事件。我有接口声明负责处理事件的方法,我有2个不同的处理程序来实现这个接口。
接口:
public interface Handler {
void handle(EventDto eventDto);
}
处理程序看起来像这样:
处理程序#1
@Async
@EventListener(condition = "@eventValidator.isForHandler1(#eventDto)")
public void synchronizeChannel(EventDto eventDto) {
}
处理程序#2
@Async
@EventListener(condition = "@eventValidator.isForHandler2(#eventDto)")
public void synchronizeChannel(EventDto eventDto) {
}
我遇到的问题是处理程序2的验证器永远不会被调用(@ eventValidator.isForHandler2)。
但是,调用第一个验证程序,但第二个处理程序获取控件并尝试处理该事件。显而易见的是它失败了,因为它不能处理它的事件。即使在第二个处理程序的事件中调用了验证器,它也肯定会失败。
我尝试删除接口并使处理程序独立(没有实现任何常见的)。它有所帮助。但是,为什么它不能使用相同的界面?可能是春天相关的bug吗?