ApplicationContext는 ApplicationEventPublisher 인터페이스를 구현하고, 이를 통해 스프링 애플리케이션에서 이벤트를 발행(publish)할 수 있는 기능을 제공한다.
Spring 4.2 버전 이전 버전에서는 발행되는 Event 객체가 ApplicationEvent
로부터 확장되고 (extends), EventListener 객체는 ApplicationListener <발행될 Event 객체 타입>
를 구현해야(implements) 했었다.
public class ExampleEvent extends ApplicationEvent {
private int data;
public ExampleEvent(Object source, int data) {
super(source);
this.data = data;
}
public int getData() {
return data;
}
}
@Component
public class ExampleEventHandler implements ApplicationListener<ExampleEvent> {
@Override
public void onApplicationEvent(ExampleEvent event) {
System.out.println("이벤트 전달 받음, data = " + event.getData());
}
}
Spring 4.2 버전 이후부터는 POJO 구조로, Spring 코드 없이 이벤트 기반 프로그래밍이 가능해졌다.
@Getter
public class MyEvent {
private int data;
private Object source;
public MyEvent(Object source, int data) {
this.source = source;
this.data = data;
}
}
@Component
public class MyEventHandler {
@EventListener
public void handle(MyEvent event) {
System.out.println(Thread.currentThread().toString());
System.out.println("이벤트를 받았다. 데이터는 " + event.getData());
}
}
이와 같이 비침투성 즉, 개발자의 코드에 Spring code가 들어가지 않도록(package가 import 되지 않도록)하여 코드를 POJO형태로 만들어 유지보수와 테스트가 용이하도록 하는 것이 Spring의 철학이다.
'Programming > Spring' 카테고리의 다른 글
Resource 추상화 (0) | 2024.12.13 |
---|---|
@Component와 @Bean (0) | 2024.12.12 |
Autowired (0) | 2024.12.11 |
ApplicationContext 2가지 빈 설정 방식 (0) | 2024.12.11 |
RequestBody 자바 객체 매핑 (0) | 2024.12.11 |