์ธํ๋ฐ ์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ธฐ๋ณธํธ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
@Autowired
private DiscountPolicy discountPolicy;
@Autowired๋ ํ์ (Type)์ผ๋ก ์กฐํ
@Component
public class FixDiscountPolicy implements DiscountPolicy {}
@Component
public class RateDiscountPolicy implements DiscountPolicy {}
DiscountPolicy์ ํ์ ํ์ ์ธ FixDiscountPolicy, RateDiscountPolicy ๋ ๋ค ์คํ๋ง ๋น์ผ๋ก ์ ์ธ
ํ์ ์ผ๋ก ์กฐํํ๋ฉด ์ ํ๋ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ๋ฌธ์ ๋ฐ์ → NoUniqueBeanDefinitionException ์ค๋ฅ ๋ฐ์
@Autowired ํ๋๋ช ๋งค์นญ
@Autowired๋ ํ์ ๋งค์นญ์ ์๋ํ๊ณ , ์ด๋ ์ฌ๋ฌ ๋น์ด ์์ผ๋ฉด ํ๋๋ช , ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ๋น ์ด๋ฆ์ ์ถ๊ฐ ๋งค์นญ
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
์ค๋ฅ ๋ฐ์
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = rateDiscountPolicy;
}
}
DiscountPolicy discountPolicy → DiscountPolicy rateDiscountPolicy
@Qualifier → @Qualifier๋ผ๋ฆฌ ๋งค์นญ → ๋น ์ด๋ฆ ๋งค์นญ
@Qualifier๋ ์ถ๊ฐ ๊ตฌ๋ถ์๋ฅผ ๋ถ์ฌ์ฃผ๋ ๋ฐฉ๋ฒ
(์ฃผ์ ์ ์ถ๊ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด์ง ๋น ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋)
@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy {}
@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
@Primary ์ฌ์ฉ
์ฐ์ ์์๋ฅผ ์ ํ๋ ๋ฐฉ๋ฒ
@Autowired ์์ ์ฌ๋ฌ ๋น์ด ๋งค์นญ๋๋ฉด @Primary๊ฐ ์ฐ์ ๊ถ์ ๊ฐ์ง๋ค
@Component
public class FixDiscountPolicy implements DiscountPolicy {}
@Component
@Primary
public class RateDiscountPolicy implements DiscountPolicy {}
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
// ์์ฑ์ ์ฃผ์
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
//์์ ์ ์ฃผ์
@Autowired
public DiscountPolicy setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
}
์ฐ์ ์์
@Primary๋ ๊ธฐ๋ณธ๊ฐ ์ฒ๋ผ ๋์ํ๋ ๊ฒ์ด๊ณ , @Qualifier๋ ๋งค์ฐ ์์ธํ๊ฒ ๋์ํ๋ค
์คํ๋ง์ ์๋๋ณด๋ค๋ ์๋์ด, ๋์ ๋ฒ์์ ์ ํ๊ถ ๋ณด๋ค๋ ์ข์ ๋ฒ์์ ์ ํ๊ถ์ด ์ฐ์ ์์๊ฐ ๋๋ค
๋ฐ๋ผ์ @Qualifier๊ฐ ์ฐ์ ๊ถ์ด ๋๋ค
'๐ Spring > Lecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์คํ๋ง์ ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ ์ง์ (2) | 2025.03.24 |
|---|---|
| Annotation ์ง์ ์์ฑ (0) | 2025.03.24 |
| ์์กด๊ด๊ณ ์ฃผ์ (0) | 2025.03.24 |
| ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ (0) | 2025.03.23 |
| ์คํ๋ง ๊ฐ์ฒด ์งํฅ ์๋ฆฌ (0) | 2025.03.23 |
