Spring监听机制的解读
首先,明确监听机制的设计模式是观察者模式
那么先复习一下观察者模式的实现方式
class Listener{
void onEVentPublished(){
//在事件发生时这个方法被回调
System.out.println("Event published!!!");
}
}
class Event{
List<Listeners> listenerList;//所有的监听器列表
void publish(T anythingYouNeed){
for(Listeners l: listenerList){
//这里还可以加一些监听器执行的条件,比如 检查anythingYouNeed中的信息是不是合乎你的要求
l.onEventPublished();
}
}
}
观察者模式的关键是,发布者拥有所有观察者的一个列表,因此在发布信息时就直接回调它的所有listener的onEventPublished()方法实现监听.
那么在spring中有个叫做EventMulticaster的类来分发事件,会调用一个叫getApplicationListeners()的方法拿到
所有的监听器(怎么拿到?还是在父类AbstractApplicationEventMulticaster的一个成员里存的有,用Set集合装的),
暴力轮询这些监听器,看看这些监听器是不是监听的发生的事件类型,如果是就回调监听器中的onApplicationEvent()方法~