Spring으로 개발을 진행할 때, @Qualifier
가 정상적으로 동작을 안하는 경우가 있다. 원인은 Lombok @RequiredArgsConstructor
과 병행해서 사용하기 때문인데 Lombok에서 코드를 자동 생성할때, @Qualifier
를 제대로 인식하지 못해서, 어떠한 Bean으로 가져와야 하는지 Spring에서 인식하지 못하는것 같다.
해서 다음과 같은 처리가 필요하다.
src/main/java/lombok.config
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
롬복 애노테이션 프로세서(AnnotationProcessor)는 생성자(필드에 선언된 애노테이션 포함)를 생성는데 사용할 필드에 선언된 @Qualifier 를 복사한다.
@Service(value = "test1")
@RequiredArgsConstructor
public class Test1ServiceImpl implements TestService {}
@Service(value = "test2")
@RequiredArgsConstructor
public class Test2ServiceImpl implements TestService {}
@RestController
@RequestMapping("url")
@RequiredArgsConstructor
public class TestController {
@Qualifier(value = "test1")
private final TestService test1Service;
@Qualifier(value = "test2")
private final TestService test2Service;
// ... do something
}
@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
}