JAVA

JAVA applicationEventPublisher로 순환참조 해결!

wooyit 2023. 2. 13. 21:02

개발 중.. 

순환참조 늪에 빠지게되었다.

 

업무 서비스: PDF ConvertorService 참조

PDF ConvertorService: 업무 서비스 참조

.. 순환참조

 

어떻게 해결할까 고민하다가 

 

pub sub design pattern 적용하면 될 것 같다는 생각이 들었다.

 

1. ConvertorEvent

@Getter
@Builder
public class ConvertorEvent {

   private ConvertorDTO convertorDTO;
    
    public static ConvertorEvent doConvertor(ConvertorDTO convertorDTO) {
    	return ConvertorEvent.builder().ConvertorDTO(convertorDTO).build();
    }
}

 

2.  ConvertorPublisher

@Component
@RequireArgsConstructor
publid class ConvertorEventPublisher {


    private final ApplicationEventPublisher applicationEventPublisher;
    
    public void doConvertor(ConvertorEvent convertorEvent) {
    	applicationEventPublisher.publishEvent(convertorEvent);
    }
}

 

3. 이벤트 발생(업무서비스)

@RequiredArgsConstructor
@Service
public class TestServiceImpl implements TestService {

    private final ConvertorEventPublisher convertorEventPublisher;
    
    @Override
    publid void test() {
    	
        ConvertorDTO dto = ConvertorDTO.builder().id("1").build();
        
        ConvertorEvent convert = ConvertorEvent.doConvertor(dto);
        convertorEventPublisher.doConvertor(convert);
        
    }
}

 

4. PDF ConvertorService(이벤트 구독)

@RequiredArgsConstructor
@Service
public class ConvertorServiceimpl implements ConvertorService {

    @EventListener
    public void doConvertor(ConvertorEvent convertorEvent) {
    	
        ///... logic
    }
}

 

이벤트 발생 후 여러 서비스에서 로직을 구현할떄 유용할 것 같다.

 

다음에도 써먹을 수 있 겠지?