Java ApplicationEvents:@EventListener注解和 ApplicationListener 接口的区别

Java ApplicationEvents: Difference between @EventListener annotation and ApplicationListener interface

提问人:mattsmith5 提问时间:11/11/2023 更新时间:11/11/2023 访问量:49

问:

我正在使用 Java ApplicationEvents 发布,然后订阅、监听事件。注解和接口有什么区别。有什么区别,还是相同的功能?@EventListenerApplicationListener

资源: https://reflectoring.io/spring-boot-application-events-explained/

方法1:

@Component
class UserRemovedListener {

  @EventListener(condition = "#event.name eq 'reflectoring'")
  void handleConditionalListener(UserRemovedEvent event) {
    // handle UserRemovedEvent
  }
}

方法2:

@Component
class UserCreatedListener implements ApplicationListener<UserCreatedEvent> {

  @Override
  public void onApplicationEvent(UserCreatedEvent event) {
    // handle UserCreatedEvent
  }
}
java spring-boot 事件 事件侦听器

评论


答:

1赞 Kenny Tai Huynh 11/11/2023 #1

根据文档,它们几乎相同

有两种方法可以定义侦听器。我们可以使用 @EventListener 注解或实现 ApplicationListener 接口。无论哪种情况,侦听器类都必须由 Spring.Blockquote 管理

但是,如果使用 @EvenListener,它将自动注册 ApplicationListener。全文如下:

从 Spring 4.1 开始,现在可以简单地用 @EventListener 注释托管 Bean 的方法,以自动注册与方法签名匹配的 ApplicationListener

在官方网站上,文档还解释说,注释使其更易于使用+更短。链接应为:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/event/EventListener.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationListener.html

希望这有帮助。

评论

0赞 mattsmith5 11/12/2023
那么Spring Boot文档中最新的官方推荐方式是什么?注解?然后我可能会重构它,谢谢