ServiceEvent , ServiceEventListener 는 java 서비스관련 이벤트를 위한 리스너 기반 이벤트 알림 시스템 구축을 위한 클래스.
ServiceEvent (abstract)
- Spring Framework의 ApplicationContextEvent를 확장하여 이벤트를 발생시킨 ApplicationContext에 대한 접근 권한 제공.
- 서비스 이벤트의 특정 유형이나 추가 정보를 나타내는 구체적인 서브 클래스 생성
예제
ServiceEvent.java
public abstract class ServiceEvent extends ApplicationContextEvent {
private static final long serialVersionUID = 1L;
protected ServiceEvent(ApplicationContext source) {
super(source);
}
public abstract String getServiceName();
}
ServiceStartEvent.java
public class ServiceStartEvent extends ServiceEvent {
private final String ServiceName;
public ServiceStartEvent(ApplicationContext source) {
super(source);
}
@Override
public String getServiceName() {
return serviceName;
}
ServiceEventListener (Interface)
- ServiceEvent 발생시 알림을 받을 리스너 정의
- Spring의 ApplicationListener<ServiceEvent>를 extend 하여ServiceEvent 객체를 수신
예제
ServiceEventListener.java
public interface ServiceEventListener extends ApplicationListener<ServiceEvent> {
default void onStart(ServiceEvent event) {
}
@Override
default void onApplicationEvent(ServiceEvent event) {
switch (event.getName()) {
case ServiceStartEvent.ServiceName:
onStart(event);
break;
default:
break;
}
}
}
SampleServiceEventListener.java
public class SampleServiceEventListener implements ServiceEventListener {
@Override
public void onApplicationEvent(ServiceEvent event) {
switch (event.getName()) {
case ServiceStartEvent.ServiceName:
start();
break;
default:
break;
}
}
}
@Component
public class SampleServiceEventListener implements ServiceEventListener {
// 위의 EventListener 구현
}
public class Application
private boolean running();
public void main(ApplicationContext ctx) {
log.info("Starting..");
this.context = ctx;
try {
context.publishEvent(new ServiceStartEvent(ctx));
} catch (Exception e) {
log.error("Service start error", e);
return;
}