TIL - day45

정상화·2023년 4월 25일
0

TIL

목록 보기
34/46
post-thumbnail

스프링

스프링 이벤트

옵저버 패턴을 이용하여 결합도를 낮출 수 있다.

  1. 어떤 이벤트가 일어났음을 전체 시스템에 알린다.
  2. 해당이벤트를 처리하는 이벤트리스너가 작동한다.

스프링의 내장객체 ApplicationEventApplicationEventPublisher가 이 기능을 제공해준다.

private final ApplicationEventPublisher publisher;
//...
@Transactional
public RsData cancel(LikeablePerson likeablePerson) {
	publisher.publishEvent(new EventBeforeCancelLike(this,likeablePerson));
    //...
}    

publisher를 통해 이벤트를 발생시킬 수 있다.

@Component
@RequiredArgsConstructor
public class InstaMemberEventListener {
    private final InstaMemberService instaMemberService;

    @EventListener
    @Transactional
    public void listen(EventAfterModifyAttractiveType event) {
        instaMemberService.whenAfterModifyAttractiveType(event.getLikeablePerson(), event.getOldAttractiveTypeCode());
    }

    @EventListener
    public void listen(EventAfterLike event) {
        instaMemberService.whenAfterLike(event.getLikeablePerson());
    }

    @EventListener
    public void listen(EventBeforeCancelLike event) {
        instaMemberService.whenBeforeCancelLike(event.getLikeablePerson());
    }

    @EventListener
    public void listen(EventAfterFromInstaMemberChangeGender event) {
        instaMemberService.whenAfterFromInstaMemberChangeGender(event.getInstaMember(), event.getOldGender());
    }
}

빈의 메소드가 @EventListener로 설정돼있는 경우 특정 이벤트가 발생하면
그 이벤트 객체를 인자로 받아 메서드가 실행된다.

마치 catch절이 특정 클래스의 exception에 반응하는 것과 비슷하다.

profile
백엔드 희망

0개의 댓글