이벤트는 도메인의 변화를 나타내는 정보를 의미한다. 혹은, 도메인의 외부와 상호 작용하는 데 사용될 수 있다.
# 이벤트 클래스 예시
import org.springframework.context.ApplicationEventPublisher;
public class Events {
private static ApplicationEventPublisher publisher;
static void setPublisher(ApplicationEventPublisher publisher) {
Events.publisher = publisher;
}
public static void raise(Object event) {
if (publisher != null) {
publisher.publishEvent(event);
}
}
}
# Configuration 예시
@Configuration
public class EventsConfiguration {
@Autowired
private ApplicationContext applicationContext;
@Bean
public InitializingBean eventsInitializer() {
return () -> Events.setPublisher(applicationContext);
}
# 이벤트 발생 예시
public class Order {
public void cancel() {
verifyNotYetShipped();
this.state = OrderState.CANCELED;
Events.raise(new OrderCanceledEvent(number.getNumber()));
}
...
import org.springframework.context.event.EventListener;
@Service
public class OrderCanceledEventHandler {
private RefundService refundService;
public OrderCanceledEventHandler(RefundService refundService) {
this.refundService = refundService;
}
@EventListener(OrderCanceledEvent.class)
public void handle(OrderCanceledEvent event) {
refundService.refund(evnet.getOrderNumber());
}
}
위 코드는 주문 취소 이벤트가 발생할 때 환불을 할 수 있도록 하는 코드이다.