相关疑难解决方法(0)

Spring 的 @DependsOn 不适用于应用程序事件?

我有一个发送应用程序事件的类。接收者不能错过这个事件,因此发送者依赖于接收者。

@Service
@DependsOn("receiver")
class Sender {
   ...
   @PostConstruct
   public void init(){
      applicationEventPublisher.publishEvent(new MyEvent());
   }
}


@Service
class Receiver {

   ...
   @EventListener
   public void onEvent(MyEvent event) {
        System.out.println("Event catched");
   }
}
Run Code Online (Sandbox Code Playgroud)

在调试模式下,您可以看到它Sender在之后初始化Receiver,这应该导致接收方始终捕获发送方的事件 - 但事实并非如此。

事实上,在初始化接收器和准备接收事件之间似乎存在延迟。如果我在发送方中延迟发布事件几毫秒,接收方就会按预期捕获它。

因此,似乎并@DependsOn不能完全确保接收器在发送者之前完全初始化,这与记录的内容完全相反。

如何在不使用任何难看的延迟的情况下实现接收者捕获事件?

java spring

3
推荐指数
1
解决办法
1234
查看次数

标签 统计

java ×1

spring ×1