本文将介绍 Spring 中的事件监听机制。
一、事件监听机制
事件监听机制的本质是观察者模式。
事件发布者可以声明某个事件的发生,它将会被广播出去,监听该事件的监听器将会被触发并执行相应的动作。
通过事件监听机制可以极大地降低代码的耦合性,在事件发布和监听模型中,
- 事件发布者只需要将事件发布,无需关心是否有事件监听器
- 事件监听器无需关心是谁发布了事件,只需要监听事件并执行逻辑即可
二、示例
定义事件类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class MsgEvent extends ApplicationEvent {
private String msg;
public String getMsg() { return msg; }
public MsgEvent(Object source) { super(source); }
public MsgEvent(Object source, String msg) { super(source); this.msg = msg; }
}
|
定义事件发布者:
1 2 3 4 5 6 7 8 9
| @Component public class MsgEventPublisher {
public void publish(String msg) { MsgEvent event = new MsgEvent(this, msg); SpringContextHolder.getApplicationContext().publishEvent(event); }
}
|
定义 Spring 上下文获取工具类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Component public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() { return applicationContext; }
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextHolder.applicationContext = applicationContext; }
}
|
定义事件监听器:
1 2 3 4 5 6 7 8 9
| @Component public class MsgEventListener implements ApplicationListener<MsgEvent> {
@Override public void onApplicationEvent(MsgEvent event) { System.out.println("MsgEventListener: " + event.getSource() + ": " + event.getMsg()); }
}
|
参考