在 Spring 框架中,org.springframework.context.ApplicationListener 接口的 onApplicationEvent(E event) 方法可以接收任何继承自 org.springframework.context.ApplicationEvent 的事件。 Spring 提供了许多内置事件,同时也允许开发者定义自定义事件。以下是一些常见的内置事件:

常见内置事件

  1. ContextRefreshedEvent

    • 说明:当 ApplicationContext 初始化或刷新时发布。可以用于在应用程序启动时执行一些初始化逻辑。
    • 示例
      @Component
      public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
          @Override
          public void onApplicationEvent(ContextRefreshedEvent event) {
              System.out.println("Context refreshed: " + event.getTimestamp());
          }
      }
      
  2. ContextStartedEvent

    • 说明:当 ApplicationContext 启动时发布。通常用于在应用程序启动后执行某些特定任务。
    • 示例
      @Component
      public class ContextStartedListener implements ApplicationListener<ContextStartedEvent> {
          @Override
          public void onApplicationEvent(ContextStartedEvent event) {
              System.out.println("Context started: " + event.getTimestamp());
          }
      }
      
  3. ContextStoppedEvent

    • 说明:当 ApplicationContext 停止时发布。可以用于在应用程序停止时释放资源。
    • 示例
      @Component
      public class ContextStoppedListener implements ApplicationListener<ContextStoppedEvent> {
          @Override
          public void onApplicationEvent(ContextStoppedEvent event) {
              System.out.println("Context stopped: " + event.getTimestamp());
          }
      }
      
  4. ContextClosedEvent

    • 说明:当 ApplicationContext 关闭时发布。通常用于在应用程序关闭时执行一些清理工作。
    • 示例
      @Component
      public class ContextClosedListener implements ApplicationListener<ContextClosedEvent> {
          @Override
          public void onApplicationEvent(ContextClosedEvent event) {
              System.out.println("Context closed: " + event.getTimestamp());
          }
      }
      
  5. RequestHandledEvent

    • 说明:在 Web 应用中,当 HTTP 请求被处理后发布,适用于 Spring MVC 。
    • 示例
      @Component
      public class RequestHandledListener implements ApplicationListener<RequestHandledEvent> {
          @Override
          public void onApplicationEvent(RequestHandledEvent event) {
              System.out.println("Request handled: " + event.getDescription());
          }
      }
      
  6. ApplicationReadyEvent

    • 说明:当应用程序启动完成并准备好接受请求时发布,通常用于在应用完全启动后执行一些操作。
    • 示例
      @Component
      public class ApplicationReadyListener implements ApplicationListener<ApplicationReadyEvent> {
          @Override
          public void onApplicationEvent(ApplicationReadyEvent event) {
              System.out.println("Application ready: " + event.getTimestamp());
          }
      }
      

自定义事件

除了内置事件,开发者也可以创建自定义事件。自定义事件需要继承自 ApplicationEvent

自定义事件示例

public class CustomEvent extends ApplicationEvent {
    private String message;

    public CustomEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

自定义事件监听器

@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {
    @Override
    public void onApplicationEvent(CustomEvent event) {
        System.out.println("Received custom event - " + event.getMessage());
    }
}

通过实现 ApplicationListener 接口,您可以监听上述这些内置事件以及任何自定义事件,从而在应用程序的不同生命周期阶段执行特定的操作。

posted on 2025-03-06 14:37  卡米i  阅读(6)  评论(0)    收藏  举报