观察者模式:spring的事件监听
之前,我在设计模式专栏里写过观察者模式,感兴趣的同学,可以去看看。
spring为我们提供了事件监听机制,可以帮助我们解耦代码。
监听机制由3部分组成:
事件: 继承ApplicationEvent类,可以自定义自己的事件消息
事件发布者: 通过ApplicationEventPublisher发布事件,分离业务,把业务传递给其他模块下游业务
事件监听者: 处理传播过来的事件
事件发布者--------事件--------->事件监听者
实现事件
/**
* @author xuelongjiang
* @description 自定义事件监听器
**/
public class MyEvent extends ApplicationEvent {
// 我们自定义的事件消息
private String msg;
public MyEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
事件发布者
/**
* @author xuelongjiang109
* @description 事件发布器
**/
@Component
public class EventDeal {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
// 发布事件
public void publish(String msg) {
MyEvent myEvent = new MyEvent(this, msg);
applicationEventPublisher.publishEvent(myEvent);
}
}
事件监听者
// 任意bean里都可以
//方法级,可以一个bean里,处理多个不同的事件,便于统一管理
@EventListener
public void dealEvent(MyEvent myEvent) {
System.out.println("监听到事件:" + myEvent.getMsg());
}
总的来说,自定义事件比较简单。对于@EventListenerd注解spring通过cglib动态代理调用执行。
重要的是,我们要运用观察者这种设计模式,在我们的设计开发中,使我们的系统更加的可插拔、高内聚,低耦合。