Spring Framework之监听器的使用
spring的事件
spring默认的事件
ContextRefreshedEvent
容器完成初始化后调用finishRefresh()
时会发布ContextRefreshedEvent
事件
protected void finishRefresh() {
this.clearResourceCaches();
this.initLifecycleProcessor();
this.getLifecycleProcessor().onRefresh();
this.publishEvent((ApplicationEvent)(new ContextRefreshedEvent(this)));
LiveBeansView.registerApplicationContext(this);
}
ContextStartedEvent
需要手动调用start()
方法,发布ContextStartedEvent
事件
public void start() {
this.getLifecycleProcessor().start();
this.publishEvent((ApplicationEvent)(new ContextStartedEvent(this)));
}
ContextStoppedEvent
需要手动调用stop()
方法,发布ContextStoppedEvent
事件
public void stop() {
this.getLifecycleProcessor().stop();
this.publishEvent((ApplicationEvent)(new ContextStoppedEvent(this)));
}
ContextClosedEvent
需要手动调用close()
或destroy()
方法时,发布ContextClosedEvent
事件
public void stop() {
this.getLifecycleProcessor().stop();
this.publishEvent((ApplicationEvent)(new ContextStoppedEvent(this)));
}
spring事件接口
ApplicationContextEvent 与 ApplicationEvent
造轮子得先看轮子长啥样,先看看spring默认的事件怎么写的
ContextClosedEvent.java
public class ContextClosedEvent extends ApplicationContextEvent {
public ContextClosedEvent(ApplicationContext source) {
super(source);
}
}
ApplicationContextEvent.java
public abstract class ApplicationContextEvent extends ApplicationEvent {
public ApplicationContextEvent(ApplicationContext source) {
super(source);
}
public final ApplicationContext getApplicationContext() {
return (ApplicationContext)this.getSource();
}
}
ApplicationEvent.java
public abstract class ApplicationEvent extends EventObject {
private static final long serialVersionUID = 7099057708183571937L;
private final long timestamp = System.currentTimeMillis();
public ApplicationEvent(Object source) {
super(source);
}
public final long getTimestamp() {
return this.timestamp;
}
}
发现事件最终是EventObject
,但是spring的监听