ServiceEvent와 ServiceEventListener 사용법

hanim·2024년 5월 27일
0
post-thumbnail

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;
		}			
	}
}
  • Spring에 리스너 등록
  1. Spring 사용시
    @Component 를 사용하여 Spring applicaton contex에 등록,
    spring context는 등록된 listener 자동관리
@Component
public class SampleServiceEventListener implements ServiceEventListener {
    // 위의 EventListener 구현
}
  • 이벤트 발생
    필요한 시전에 ServiceEvnet를
    applicationContext.publishEvent(event) 같은 메서드 이용하여 이벤트를 발생시키며, 발생된 이벤트는 등록된 모든 ServiceEventListener 에게 전달됨
    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;
    		}
profile
개발자가 되려는 개발자

0개의 댓글

관련 채용 정보