监控对象被好多功能使用,当监控对象删除需要涉及到一些功能将对应的关系即对应的配置删掉
-
删掉监控对象之前调用各个使用该监控对象提供的接口进行删除之前的善后工作
-
使用事件监听的方式,所有使用监控对象的地方都注册一个对象删除的事件,当监控对象删除的时候向各个监听者发送事件,各个监听者内部做相应的处理。
做完某一件事情以后,需要广播一些消息或者通知,告诉其他的模块进行一些事件处理,一般来说,可以一个一个发送请求去通知,但是有一种更好的方式,那就是事件监听,事件监听也是设计模式中 发布-订阅模式、观察者模式的一种实现。
观察者模式:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
-
定义一个事件类:MyEvent extends ApplicationEvent
-
在事件发布者中调用applicationContext全局变量的publishEvent(new MyEvent());发送一个myevent的事件
-
在需要接收该事件的bean中编写一个监听方法,并在该方法中添加@EventListener
@EventListener
public void Listener(MyEvent event) //根据不同的时间类型自动找到对应的监听函数
{
}
@EventListener
public void Listener(OtherEvent event){
}
- 也可以通过对接收时间的类中实现ApplicationListener类,但是这样,每一个监听的事件都要对应一个类,相对@EventListener不够灵活
- 注释@EventListener还可以与注释@Async进行组合使用,以提供异步事件处理的机制。默认用@EventListener是同步的处理方式的。
@Component
@EnableAsync //@Async要与@EnableAsync一起使用才可以
public class MyEventListener{
@Async
@EventListener
public void Listener(MyEvent event){
}
}
这样做的好处是什么
1、单一职责原则、代码耦合降低、事件的处理人员只需关注处理的代码、发布人员只需关注发布的代码;
2、即可同步 也可异步;