在 Spring 框架中,org.springframework.context.ApplicationListener 接口的 onApplicationEvent(E event) 方法可以接收任何继承自 org.springframework.context.ApplicationEvent 的事件。 Spring 提供了许多内置事件,同时也允许开发者定义自定义事件。以下是一些常见的内置事件:
常见内置事件
-
ContextRefreshedEvent
- 说明:当
ApplicationContext初始化或刷新时发布。可以用于在应用程序启动时执行一些初始化逻辑。 - 示例:
@Component public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { System.out.println("Context refreshed: " + event.getTimestamp()); } }
- 说明:当
-
ContextStartedEvent
- 说明:当
ApplicationContext启动时发布。通常用于在应用程序启动后执行某些特定任务。 - 示例:
@Component public class ContextStartedListener implements ApplicationListener<ContextStartedEvent> { @Override public void onApplicationEvent(ContextStartedEvent event) { System.out.println("Context started: " + event.getTimestamp()); } }
- 说明:当
-
ContextStoppedEvent
- 说明:当
ApplicationContext停止时发布。可以用于在应用程序停止时释放资源。 - 示例:
@Component public class ContextStoppedListener implements ApplicationListener<ContextStoppedEvent> { @Override public void onApplicationEvent(ContextStoppedEvent event) { System.out.println("Context stopped: " + event.getTimestamp()); } }
- 说明:当
-
ContextClosedEvent
- 说明:当
ApplicationContext关闭时发布。通常用于在应用程序关闭时执行一些清理工作。 - 示例:
@Component public class ContextClosedListener implements ApplicationListener<ContextClosedEvent> { @Override public void onApplicationEvent(ContextClosedEvent event) { System.out.println("Context closed: " + event.getTimestamp()); } }
- 说明:当
-
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()); } }
-
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 接口,您可以监听上述这些内置事件以及任何自定义事件,从而在应用程序的不同生命周期阶段执行特定的操作。
浙公网安备 33010602011771号