IoC Container - ApplicationEventPublisher
- 📚 Spring/Spring 개념
- 2020. 9. 11. 16:06
| 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 |