spring 이벤트

스프링 이벤트

스프링에서 ApplicationEvent를 상속받아서 구현된 이벤트를 수신할수 있는 방법이 여러가지 있다.

기본적으로 ApplicationListener를 상속 받아서 구현하는 방법

1
2
3
4
5
6
7
8
9
10

@Slf4j
@Component
public class TestSpringEventApplicationListener implements ApplicationListener<TestSpringEvent> {
@Override
public void onApplicationEvent(TestSpringEvent event) {
log.debug("Received spring custom event - {}", event);
}
}

두번째로 @EventListener 어너테이션을 사용해서 처리하는 방법

1
2
3
4
5
6
7
8
9
10
11
12

@Slf4j
@Component
public class TestSpringEventListener {

@EventListener
public <T> void handleTestSpringEvent(TestSpringEvent<T> event) {
log.debug("event listener {}", event);
}

}

세번째로 @TransactionalEventListener 어너테이션을 사용하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Slf4j
@Component
public class TestSpringTransactionalEventListener {

@TransactionalEventListener
public <T> void handleAfterCommit(TestSpringEvent<T> event) {
log.debug("AFTER COMMIT {}", event);
}

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMPLETION)
public <T> void handleAfterCompletion(TestSpringEvent<T> event) {
log.debug("AFTER COMPLETION {}", event);
}

@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)
public <T> void handleAfterRollback(TestSpringEvent<T> event) {
log.debug("AFTER ROLLBACK {}", event);
}

@TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
public <T> void handleBeforeCommit(TestSpringEvent<T> event) {
log.debug("BEFORE COMMIT {}", event);
}

}

참조