학습 페이지

ApplicationEventPublisher는 옵저버 패턴을 사용해 만들어진 구현체로 이벤트 프로그래밍을 할 때 사용한다.

1. 이벤트 정의


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;
    }
}

2. 이벤트 생성

@Component
public class EventRunner implements ApplicationRunner {
    @Autowired
    ApplicationEventPublisher publisher;

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

3. 이벤트 받기