Spring的发布订阅模型实际上并不是异步的,而是同步的来将代码进行解耦。而TransactionEventListener仍是通过这种方式,只不过加入了回调的方式来解决,这样就能够在事务进行Commited,Rollback...等的时候才会去进行Event的处理。
实际上通过TransactionSynchronizationManager.registerSynchronization是通过手动的来注册回调也可以实现类似功能。这里我们重点看第一种。直接上代码:
1、写一个监听事件实体
2、写一个注解:
3、实现一个切面,并在切入点进行事件发布
4、监听处理器
说明:
@TransactionalEventListener注解是需要在事务内发布的事件才可以被监听到,该注解的phase值有四个枚举,默认就是AFTER_COMMIT,其他三个值BEFORE_COMMIT,AFTER_ROLLBACK,AFTER_COMPLETION。