Spring的發佈訂閱模型實際上並不是異步的,而是同步的來將代碼進行解耦。而TransactionEventListener仍是通過這種方式,只不過加入了回調的方式來解決,這樣就能夠在事務進行Commited,Rollback...等的時候纔會去進行Event的處理。
實際上通過TransactionSynchronizationManager.registerSynchronization是通過手動的來註冊回調也可以實現類似功能。這裏我們重點看第一種。直接上代碼:
1、寫一個監聽事件實體
2、寫一個註解:
3、實現一個切面,並在切入點進行事件發佈
4、監聽處理器
說明:
@TransactionalEventListener註解是需要在事務內發佈的事件纔可以被監聽到,該註解的phase值有四個枚舉,默認就是AFTER_COMMIT,其他三個值BEFORE_COMMIT,AFTER_ROLLBACK,AFTER_COMPLETION。