ApplicationEventPublisher는 옵저버 패턴을 사용해 만들어진 구현체로 이벤트 프로그래밍을 할 때 사용한다.
public class MyEvent extends ApplicationEvent {
private int data;
public MyEvent(Object source) {
// source는 이벤트의 발생지를 의미한다. 주로 this를 넘긴다.
super(source);
}
public MyEvent(Object source, int data) {
super(source); //생성자와 함께 데이터를 받아 멤버변수로 저장한다.
this.data = data;
}
public int getData() {
return data; // 멤버변수를 이벤트를 받은쪽에 전달한다.
}
}
Spring 4.2 이상에서는 Spring코드를 걷어내고, 다음과 같이 POJO 클래스만으로도 가능하다.
public class MyEvent {
private int data;
private Object source;
public MyEvent(Object source, int data) {
this.source = source;
this.data = data;
}
public Object getSource() {
return source;
}
public int getData() {
return data;
}
}
publishEvent(Event)
메소드로 이벤트를 생성한다.@Component
public class EventRunner implements ApplicationRunner {
@Autowired
ApplicationEventPublisher publisher;
@Override
public void run(ApplicationArguments args) throws Exception {
publisher.publishEvent(new MyEvent(this, 123));
}
}
ApplicationListener<이벤트타입>
인터페이스를 구현해야 한다.