본문 바로가기

두두의 IT/Spring

조회 빈이 2개 이상일 때

728x90

조회 대상 빈이 2개 이상일 때 해결 방법

1. @Autowired 필드명 매칭

  • 먼저 타입 매칭을 시도하고 그 결과에 여러 빈이 있을 때 추가로 동작함
  • 타입 매칭의 결과가 2개 이상일 때 필드명으로 빈 이름 매칭

2. @Qualifier -> @Qualifier끼리 매칭 -> 빈 이름 매칭

  • 추가 구분자를 붙여주는 방법
  • 주입시 추가적인 방법을 제공하는 것이지 빈 이름을 변경하는 것은 아니다
  • 생성자/수정자에 @Qualifier 넣어주기
  • Qualifier는 Qualifier를 찾는 용도로만 사용하는게 명확하고 좋다.

3. @Primary 사용

  • @Autowired 시에 여러 번 매칭되면 @Primary가 우선권을 갖는다.

 

코드에서 자주 사용하는 메인 데이터베이스의 커넥션을 획득하는 스프링 빈이 있고, 코드에서 특별한 기능으로 가끔 사용하는 서브 데이터베이스의 커넥션을 획득하는 스프링 빈이 있다고 생각해보자. 메인 데이터베이스의 커넥션을 획득하는 스프링 빈은 @Primary를 적용해서 조회하는 곳에서 @Qualifier 지정 없이 편리하게 조회하고, 서브 데이터베이스 커넥션 빈을 획득할 때는 @Qualifier를 지정해서 명시적으로 획득하는 방식으로 사용하면 코드를 깔끔하게 유지할 수 있다. 물론 이때 메인 데이터베이스의 스프링 빈을 등록할 때 @Qualifier를 지정해주는 것은 상관없다.

 

우선순위

@Primary는 기본값 처럼 동작하는 것이고 @Qualifier는 매우 상세하게 동작한다. 이런 경우 어떤 것이 우선권을 가져갈까? 스프링은 자동보다는 수동이, 넓은 범위의 선택권 보다는 좁은 범위의 선택권이 우선 순위가 높다. 따라서 여기서도 @Qualifier가 우선권이 높다.

'두두의 IT > Spring' 카테고리의 다른 글

DAO, DTO, VO 차이  (0) 2023.04.17
JUnit5  (0) 2022.11.10
lombok  (0) 2022.10.31
의존관계 자동 주입  (0) 2022.10.29
컴포넌트 스캔  (0) 2022.10.27