IoC Container - ApplicationEventPublisher

| IoC Container - ApplicationEventPublisher

옵저버 패턴의 구현체로, 이벤트 기반 프로그래밍에 유용한 인터페이스를 제공한다

 

Observer Patten

  • 옵저버 패턴엔 행위자, 관찰자가 존재한다
  • 행위자의 어떤 행동으로 변경 사항이 발생하면 즉시 관찰자에게 알려주는 것이 요점이다.
  • 가장 대표적인 응용 사례는 데이터 바인딩 이라고 할 수 있다.
  • 웹 프론트엔드 에서 많이 사용되고 있는 프레임워크 중 Angular, React 등은 데이터 바인딩을 지원하고 있다
  • View가 어떤 데이터를 바라보고 있고, 그 데이터가 변하는 즉시 view도 그 변화를 반영한다
  • 물론 View가 바뀐 데이터를 반영하는 과정엔 개발자의 개입이 필요하지 않다.

 

Event Publisher / Subscriber

  • Spring 에서는 Event를 발생시키는 publisher, Event를 받아서 처리하는 subscriber를 간단하게 구현할 수 있다.

MyEvnet

public class MyEvent {

    private int data;
    private Object object;

    public MyEvent(Object source, int data) {
        this.object = source;
        this.data = data;
    }

    public Object getObject() {
        return object;
    }

    public int getData() {
        return data;
    }
}

EventHandler

@Component
public class MyEventHandler {

    @EventListener
    public void handle(MyEvent event) {
        System.out.println("이벤트 받았다. 데이터는 " + event.getData());
    }
}

AppRunner

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        applicationEventPublisher.publishEvent(new MyEvent(this, 100));
    }
}

결과

이벤트 받았다. 데이터는 100

 

Multiple Subscriber

  • 이벤트 처리하는 곳이 하나 이상일 경우 위와 똑같이 하면 된다.
  • 참고로 순서는 보장하지않는다.
  • 그래서 아래와 같이 @Order 어노테이션을 통해 순서를 정해 줄 수 있다.
@Component
public class MyEventHandler {

    @EventListener
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public void handle(MyEvent event) {
        System.out.println("이벤트 받았다. 데이터는 " + event.getData());
    }
}

'📚 Spring > Spring 개념' 카테고리의 다른 글

Resource 추상화  (0) 2020.09.14
IoC Container - ResourceLoader  (0) 2020.09.11
IoC Container - MessageSource  (0) 2020.09.11
IoC 컨테이너 - Environment  (0) 2020.09.09
IoC 컨테이너 - Bean 의 스코프(Scope)  (0) 2020.09.09

댓글

Designed by JB FACTORY