13. 중복 빈 문제
13. 중복 빈 문제
중복 빈 문제
조회 빈이 2개 이상이면 어떻게 될까? - 문제
- 일반적으로 타입으로 조회하게 된다면 상속으로 여러개의 빈 중 어떤걸 가져와야할지 문제가 생길 수 있다.
- 하위타입으로 지정하면? → 문제는 해결되지만 DIP 위반
- 역할과 구현의 분리에 어긋남
- 언제나 추상적인 것에 의존하도록 만들기
해결법
@Autowired 필드명 매칭
@Autowired
는 타입 매칭을 시도하고 여러 빈이 있으면 필드이름, 파라미터 이름으로 빈 이름을 추가 매칭
1
DiscountPolicy rateDiscountPolciy
- 변수 이름을 빈 이름을 맞추어서 특정 빈을 지정할 수 있다!
- 단
xml
에서는 동작하지 않는다.
@Quilifier 사용
@Quilifier
는 추가 구분자를 붙여주는 방법, 빈 이름을 바꾸는 것이 아니다.
1
2
3
4
5
6
7
8
9
10
11
@Component
@Quilifier("rateDisocuntPolicy")
public class RateDisocuntPolicy implements DisocuntPocily {
...
}
Bean을 등록
@Quilifier("rateDisocuntPolicy") DiscountPolicy rateDiscountPolciy
- 만약
@Quilifier("rateDisocuntPolicy")
를 등록 해놓고 이 이름을 못찾으면? - 마찬가지로 Bean의 이름 중에 rateDisocuntPolicy 이름의 스프링 빈을 다음으로 수행한다.
- 기왕이면 @Quilifier(“rateDisocuntPolicy”) 는 @Quilifier() 로만 사용할 때 쓰자…
@Primary 사용
- 중복된 Bean이 있을 시에 우선순위를 지정해주는 방법
- 가장 편한 방법 → 코드가 더러워지지 않는다.
@Primary
를 사용되어 져있는 Bean을 우선적으로 등록된다.- 메인 로직이 많은 객체 등을 먼저 우선순위 할 수 있는 느낌으로 응용 가능
어떻게 사용하면 좋을까?
- 주로 사용하는 빈은
@Primary
를 사용해 사용한다. - 추가적으로 필요한 빈으로 바꿔야할 객체에
@Qulifier
의 이름을 지정해놓고 호출해서 사용한다. - 우선 순위는
@Qulifier
>@Primary
이다.- 스프링은 언제나 손이 많이 가는 수동에 우선순위를 부여한다고 생각하자.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.