【spring】 ApplicationListener的使用及原理简析
ApplicationListener
是 Spring 框架中的一个接口,用于在应用程序的事件发生时接收通知。这些事件可以是容器自身的生命周期事件,也可以是用户定义的事件。
使用 ApplicationListener
的步骤如下:
- 定义一个事件类,继承自
ApplicationEvent
。 - 创建一个
ApplicationListener
的实现类,用于监听特定的事件。 - 注册
ApplicationListener
到 Spring 容器中。
以下是一个简单的例子:
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationListener implements ApplicationListener<MyCustomEvent> {
@Override
public void onApplicationEvent(MyCustomEvent event) {
// 处理事件逻辑
System.out.println("Event received: " + event.getClass().getSimpleName());
}
}
class MyCustomEvent extends ApplicationEvent {
public MyCustomEvent(Object source) {
super(source);
}
}
在 Spring 容器中发布事件:
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void doSomething() {
// 业务逻辑处理
MyCustomEvent event = new MyCustomEvent(this);
applicationEventPublisher.publishEvent(event);
}
当 Spring 容器启动并完成所有的 Bean 的创建和初始化后,ApplicationListener
会自动触发 onApplicationEvent
方法。
原理简析:
Spring 容器在启动时会保留所有已注册的 ApplicationListener
的引用。当容器内发生某些特定事件时,容器会通过 ApplicationEventMulticaster
类广播事件,这个类会遍历所有的 ApplicationListener
并调用其 onApplicationEvent
方法,将事件传递给它们。
这个过程是通过 Spring 的观察者模式实现的,ApplicationEvent
是观察目标,ApplicationListener
是观察者,ApplicationEventMulticaster
负责将事件分发给所有注册的观察者。
评论已关闭