티스토리 뷰

Java/Spring

<Spring> @Qualifier이란?

면목동인간 2023. 10. 9. 02:03

@Qualifier이란?

 @Qualifier은 @Primary 어노테이션과 다르게 빈 객체에 이름을 지정하여 객체를 주입하는 방식이다.

 

<Spring> @Primary이란?

@Primary이란? @Primary 어노테이션은 예를 들어 클래스 A에 인터페이스 B를 선언했는데 인터페이스를 구현한 객체 2개가 존재할 경우 스프링은 어느 객체를 주입해야 하는지 알 수 없게 되는데 주입

oniic.tistory.com

 

@Qulifier 예제

인터페이스

public interface SampleDAO {
}

인터페이스 구현 객체

 @Qualifier으로 이름을 지정

@Repository
@Qualifier("sample")
public class SampleDAOImpl implements SampleDAO {
}
@Repository
@Qualifier("event")
public class EventSampleDAOImpl implements SampleDAO {
}

의존 객체

@Service
@ToString
@RequiredArgsConstructor
public class SampleService {

    @Qualifier("event")
    private final SampleDAO sampleDAO;
}

테스트 코드

@Log4j2
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/root-context.xml")
public class SampleTests {

    @Autowired
    private SampleService sampleService;

    @Test
    public void testService() {

        log.info(sampleService);

    }
}

테스트 코드를 실행하면 @Qualifier("event")으로 지정한 빈이 주입이 된 걸 확인할 수 있다.

 

※ lombok의 @RequiredArgsConstructor과 @Qualifier를 사용할 경우 주의할 점.

 lombok의 @RequiredArgsConstructor 어노테이션은 객체 내에 final이 붙은 필드에 대해 생성자를 생성해 준다. 하지만 생성자를 생성하면 생성자 인자에 @Qualifier를 생성해주지 않는다(인식X).

해결 방법

 프로젝트 최상단에 lombok.config 파일을 생성 후 아래와 같이 작성한다.

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

 

 


본 포스팅은 “자바 웹 개발 워크북/구멍가게 코딩단 저”를 읽고 학습한 내용을 정리한 것

댓글
최근에 올라온 글
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함
Total
Today
Yesterday