相关原理

在 Spring 容器中通过ApplicationEven类和ApplicationListener接口来实现事件监听机制,每次Event被发布到Spring容器中时都会通知该Listener。需要注意的是,Spring 的事件默认是同步的,调用 publishEvent 方法发布事件后,它会处于阻塞状态,直到Listener接收到事件并处理返回之后才继续执行下去。
Spring 事件机制默认是同步阻塞的,如果 ApplicationEventPublisher 发布事件之后他会一直阻塞等待listener 响应,多个 listener 的情况下前面的没有执行完后面的会一直被阻塞。我们可以自己自定义线程池并注入进去,本文就是采取这种方式实现的。
事件调用方法.png

流程步骤

用户执行业务操作前,会对用户进行权限校验,无权限则直接返回,后续执行完相关业务操作后会将操作保存下来,执行保存日志操作,将操作日志对象封装成Event事件,通过Spring容器发布,事件过程是异步执行的,会直接将执行结果返回给用户。采用事件驱动,异步化保存日志记录,当中采用了观察者模式工厂模式和命令模式。 日志 - 图2