Java - Lombok + Spring에서 @Qualifer 적용 이슈

JunMyung Lee·2022년 12월 16일
0

자바

목록 보기
2/8
post-custom-banner

Spring으로 개발을 진행할 때, @Qualifier가 정상적으로 동작을 안하는 경우가 있다. 원인은 Lombok @RequiredArgsConstructor과 병행해서 사용하기 때문인데 Lombok에서 코드를 자동 생성할때, @Qualifier를 제대로 인식하지 못해서, 어떠한 Bean으로 가져와야 하는지 Spring에서 인식하지 못하는것 같다.
해서 다음과 같은 처리가 필요하다.

파일 생성

src/main/java/lombok.config 

파일 작성

lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier

롬복 애노테이션 프로세서(AnnotationProcessor)는 생성자(필드에 선언된 애노테이션 포함)를 생성는데 사용할 필드에 선언된 @Qualifier 를 복사한다.

코드 - Service

@Service(value = "test1")
@RequiredArgsConstructor
public class Test1ServiceImpl implements TestService {}

@Service(value = "test2")
@RequiredArgsConstructor
public class Test2ServiceImpl implements TestService {}

코드 - Controller

@RestController
@RequestMapping("url")
@RequiredArgsConstructor
public class TestController {

    @Qualifier(value = "test1")
    private final TestService test1Service;
    
    @Qualifier(value = "test2")
    private final TestService test2Service;
    
    // ... do something
}

여담 - @Resource

@Resource 어노테이션을 통해서도 값을 지정할 수 있는데 이때는 롬복을 사용하지 않는다. ( 물론 lombokl.config도 불필요 )


@RestController
@RequestMapping("url")
//@RequiredArgsConstructor
public class TestController {

	// private final -> private
    @Resource(name = "test1")
    private TestService test1Service;
    
    @Resource(name = "test2")
    private final TestService test2Service;
    
    // ... do something
}
profile
11년차 검색개발자 입니다. 여러 지식과 함께 실제 서비스를 운영 하면서 발생한 이슈에 대해서 정리하고 공유하고자 합니다.
post-custom-banner

0개의 댓글