spring容器事件监听与观察者
1,观察者模式
被观察者
public interface watched{
void add(Watcher w);
void multicaster();//广播
}
观察者
public interface Watcher{
void watcher();
}
2, 事件监听
事件源:任何一个java类都可以做为事件源,但是必须维护一个监听器列表
public abstract class EventSource{
List listeners = new ArrayList();
public void addListener(EventListener listener){
listeners.add(listener);
}
}
事件对象
public abstract class EventObject{
EventSource s;
EventObject(EventSource s){
this.s = s;
}
Object getSource(){
return s;
}
}
事件监听器
public interface EventListener{
onEvent(EventObject eo);
}
3, spring 容器事件监听
事件源:
注意:ApplicationContext不算真正的事件源
真正的事件源应该是:ConfigurableApplicationContext
原因是ApplicationContext接口并没有给出维护观察者的列表函数。
事件:
容器启动事件 ContextStartedEvent
public void start() {
Map<String, Lifecycle> lifecycleBeans = getLifecycleBeans();
for (String beanName : new LinkedHashSet<String>(lifecycleBeans.keySet())) {
doStart(lifecycleBeans, beanName);
}
publishEvent(new ContextStartedEvent(this));//广播
}