使用EventListener
Spring提供的事件监听机制,使产生事件的代码和处理事件的代码进行了解耦,例如用户注册后需要进行给用户发送邮件等一系列耗时操作,这些操作就没有必要和用户注册的代码耦合在一起,可以通过发布用户注册事件将这两个操作解耦,对于耗时操作可以同时使用@Async
使事件处理器异步执行.代码如下:
1 |
|
1 |
|
使用TransactionalEventListener
然而上面的代码是存在问题的,createCustomer
方法有@Transactional
注解,表示这个方法在事务内,发布事件的时候事务还没有提交,此时就发送邮件显然不妥,所以这个事件必须要在事务提交后才可以执行,现在@TransactionalEventListener
就派上了用场,这个注解本身就是一个@EventListener
,但是额外提供了对事务的支持,默认的事务阶段是事务提交之后.
1 |
|
参考: