아빠는 개발자

[java] 이벤트 리스너 @EventListener 본문

Java

[java] 이벤트 리스너 @EventListener

father6019 2024. 3. 31. 16:58
728x90
반응형

EventListener 란?

 

Java의 @EventListener은 Spring Framework에서 사용되는 애노테이션입니다. Spring Framework은 이벤트 기반 아키텍처를 지원하며, @EventListener은 이벤트를 처리하는 메서드를 표시하는 데 사용됩니다.

@EventListener 애노테이션을 사용하면 이벤트를 수신하고 처리하는 메서드를 정의할 수 있습니다. 이 메서드는 특정 이벤트가 발생할 때 호출됩니다.

예를 들어, Spring 애플리케이션에서 이벤트가 발생하고 해당 이벤트를 처리하려는 경우 다음과 같이 @EventListener을 사용할 수 있습니다

 

라고 한다. 

 

PotalEventHandler를 @Component 설정해주고

 

process 에 EventListener 어노테이션을 붙여준다. 

그러면 ShopRequest 타입의 이벤트를 처리 할 수 있다. 

package com.doo.aqqle.portal;

import com.doo.aqqle.model.request.LocationRequest;
import com.doo.aqqle.model.request.ShopRequest;
import com.doo.aqqle.service.LocationService;
import com.doo.aqqle.service.ShopService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.time.LocalTime;

@RequiredArgsConstructor
@Component
@Slf4j
public class PortalEventHandler {

    @Async
    @EventListener
    public void process(ShopRequest shopRequest) {
        log.info("ShopRequest : {}, 시간 : {}", shopRequest, LocalTime.now());
    }

    @Async
    @EventListener
    public void process(LocationRequest locationRequest) {
        log.info("LocationRequest : {}, 시간 : {}", locationRequest, LocalTime.now());
    }
}

 

ApplicationEventPublisher 를 선언해주고 

private final ApplicationEventPublisher applicationEventPublisher;

 

applicationEventPublisher.publishEvent(shopRequest);

 

이렇게 이벤트 리스너를 실행시켜주면.. 되는데 이걸 어따쓴담..

void 라서 ..

 

package com.doo.aqqle.service;

import com.doo.aqqle.model.CommonResult;
import com.doo.aqqle.model.request.LocationRequest;
import com.doo.aqqle.model.request.ShopRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@RequiredArgsConstructor
@Service
@Slf4j
public class PortalService {

    private final ResponseService responseService;
    private final ApplicationEventPublisher applicationEventPublisher;
    public CommonResult portalInfos (ShopRequest shopRequest, LocationRequest locationRequest) {

        applicationEventPublisher.publishEvent(shopRequest);
        applicationEventPublisher.publishEvent(locationRequest);

        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("LOCATION", null);
        resultMap.put("ITEM", null);

        return responseService.getSingleResult(resultMap);

    }

}




728x90
반응형

'Java' 카테고리의 다른 글

[java] Unix 타임스탬프  (0) 2024.06.01
[JPA] CRUD 구현하기  (0) 2024.04.10
[Selenium] Java Selenium - multi browser  (0) 2023.12.31
[java] FileUtils.cleanDirectory  (0) 2023.12.31
Table '{DB}.hibernate_sequence' doesn't exist  (0) 2023.12.24