티스토리 뷰
@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
본 포스팅은 “자바 웹 개발 워크북/구멍가게 코딩단 저”를 읽고 학습한 내용을 정리한 것
'Java > Spring' 카테고리의 다른 글
| <Spring> 트랜잭션 프록시 내부 호출시 문제점 (0) | 2024.07.29 |
|---|---|
| <Spring> @SessionAttribute 이란? (0) | 2024.07.25 |
| <Spring> List, Map으로 빈 주입 받기 (0) | 2024.07.19 |
| <Spring> @RequiredArgsConstructor과 의존성 주입 (0) | 2023.10.09 |
| <Spring> @Primary이란? (0) | 2023.10.08 |
댓글
