EventListener
publishEvent() 에서 동작한다.
TransactionalEventListener
publishEvent() 에서 동작하는데, 이 때 단순히TransactionalApplicationListenerSynchronization 에 등록한다.
TransactionInterceptor 에서 commit 후에 afterCompletion 에서 동작한다(
TAS$invokeWithinTransaction 의commitTransactionAfterReturning
둘의 차이:
EventListener 는 ApplicationListenerMethodAdapter
TransactionalEventListener 는 TransactionalApplicationListenerMethodAdapter
이다.
TransactionalEventListener
•
publishEvent 에서 등록된다.
EventListener
•
application 구동시 abstractApplicationContext 에서 등록된다.
listeners 를 가져올 때 모든 listener 를 순회돌면서 event type 과 맞는 listener 들만 가져온다.