๐น Bean ๋ฑ๋ก๊ณผ ์กฐํ ๊ท์น
[ Bean ๋ฑ๋ก ]
Spring์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ์๋/ํด๋์ค์ ์ด๋ฆ์ Bean์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค.
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
๊ฐ๋ฐ์๊ฐ ์ง์ ๋น์ ์ด๋ฆ์ ์ง์ ํ ์๋ ์๋ค.
@Bean("fixDiscountPolicy")
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
@Bean("rateDiscountPolicy")
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
[ Bean ์กฐํ ๊ท์น ์ ๋ต ]
@Autowired๊ฐ ๋ฑ๋ก๋ ๋น์ ์ฐพ์ ๋์๋ ๋ค์๊ณผ ๊ฐ์ ๋งค์นญ ๊ท์น์ผ๋ก ๋น์ ์กฐํํ๋ค.
1. ์ฃผ์ ๋ฐ๊ณ ์ ํ๋ ํ์ ์ผ๋ก ๋งค์นญ์ ์๋ํ๋ค.
2. ํ์ ์ด ์ฌ๋ฌ ๊ฐ๋ฉด ํ๋ ๋๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ๋งค์นญ์ ์๋ํ๋ค.
ํ์ง๋ง ๋น์ ์ด๋ฆ์ด ์ถฉ๋๋์ด ๋น ์ด๋ฆ๋ง์ผ๋ก ํด๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋๋ ๋น์ ์ถ๊ฐ ๊ตฌ๋ถ์๋ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ์
@Qualifier๋ @Primary ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ํธ๋ฆฌํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
์ถ๊ฐ๋ก Spring์ ์๋ฐ ํ์ค ์ด๋ ธํ ์ด์ ์ธ @Resource๋ผ๋ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์๋ค.
@Resource๋ @Autowired์ ๋ฌ๋ฆฌ ํ๋ ์ด๋ฆ์ผ๋ก ๋น์ ์ฐพ๋๋ค.
์ ๋ฆฌํ์๋ฉด ์๋์ ๊ฐ๋ค.
1. @Autowired : ํ๋ ํ์ ์ ๊ธฐ์ค์ผ๋ก ๋น์ ์ฐพ๋๋ค.
2. @Resource : ํ๋ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๋น์ ์ฐพ๋๋ค.
๐น @Qualifier์ @Primary
[ @Qualifier - ๋น์ Alias(๊ตฌ๋ถ์) ]
๋น์ ์ด๋ฆ๋ง์ผ๋ก ๋ถ์กฑํ๊ณ , ์ถ๊ฐ์ ์ธ ์ ๋ณด๊ฐ ํ์ํ ์ ์๋ค.
๊ทธ๋ฐ ์ํฉ์์ @Qualifier ์ด๋ ธํ ์ด์ ์ ํตํด ๋น์ ์ถ๊ฐ ๊ตฌ๋ถ์๋ฅผ ๋ถ์ฌ์ค ์ ์๋ค. ๋น์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ ์๋๋ค.
๋ง์ฝ ์์ ๋ ๊ฐ์ง DiscountPolicy ์ค์์ FixDiscountPolicy๋ฅผ ์ค์ ์ ์ผ๋ก ํ์ฉํ๊ณ ์ถ๋ค๋ฉด, ํด๋น ๋น์ mainDiscountPolicy๋ผ๋ ๋ณ์นญ ๋๋ ๊ตฌ๋ถ์๋ฅผ ๋ถ์ฌํด ์ค ์ ์๋ค.
@Qualifier("mainDiscountPolicy")
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
๋ค์๊ณผ ๊ฐ์ด ๋น์ ์ฐพ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์ @Qualifier ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌํ์ฌ ๋น์ ์ฐพ๋๋ก ํ ์ ์๋ค.
public DiscountService(@Qualifier("mainDiscountPolicy") fixDiscountPolicy) {
this.discountPolicy = fixDiscountPolicy;
}
1. ํด๋น @Qualifier๊ฐ ๋ถ์ ๋น์ ์กฐํํ๋ค.
2. @Qualifier๊ฐ ๋ถ์ ๋น์ ๋ชป ์ฐพ์ผ๋ฉด ํ๋ ๋๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ๋งค์นญ์ ์๋ํ๋ค.
3. ๊ทธ๋๋ ์ฐพ์ง ๋ชปํ๋ฉด NoSuchBeanDefinitionException์ด ๋ฐ์ํ๋ค.
๋ฌผ๋ก , ๋น์ ์ฐพ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์ @Qualifier๋ฅผ ๋ถ์ด์ง ์์๋ ์ ์์ ์ผ๋ก ์๋ํ๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์ ์ง ๋ณด์ ์ ํท๊ฐ๋ฆด ์ ์์ผ๋ฏ๋ก ๋น์ ์์ฑํ๋ ๊ณณ๊ณผ ์ฐพ๋ ๊ณณ ๋ชจ๋ @Qualifier๋ฅผ ๋ถ์ฌ์ฃผ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
[ @Primary - ๋น์ ์ฐ์ ์์ ๋ถ์ฌ ]
์ฌ๋ฌ ํ์ ์ ๋น์ด ์กด์ฌํ ๋, ํน์ ๋น์ ์ฐ์ ์ ์ผ๋ก ์ฃผ์ ํ๊ณ ์ถ๋ค๋ฉด @Primary ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ ์๋ค.
Spring์ด ํ์ ์ ๋น์ ์ฐพ๋ค๊ฐ @Primary๊ฐ ๋ถ์ด์๋ ๋น์ ๋ฐ๊ฒฌํ๋ฉด, ๋ฐ๋ก ํด๋น ๋น์ ์ฃผ์ ์ํจ๋ค.
์ฆ, @Primary๋ ์ฌ๋ฌ ๊ฐ์ ๋น๋ค ์ค์์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
@Primary
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
๋ง์ฝ @Qualifier์ @Primary ๋ชจ๋ ๋ฑ๋ก๋์ด ์๋ค๋ฉด, ์ด๋ฆ์ ์ง์ ์ง์ ํด ์ฃผ๋ @Qualifier๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค.
[ ๋น ๋ฑ๋ก ์ถฉ๋ ๋ฐ์ ]
ํ์ง๋ง ์์ ๊ฐ์ด ์ค์ ํด ์ฃผ์ง ์์ ๋น ๋ฑ๋ก ์ ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ฉด Spring์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ๋๋ค.
์๋ ๋น vs ์๋ ๋น : ๋น ์ด๋ฆ ์ค๋ณต ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์๋ ๋น vs ์๋ ๋น : ๊ณผ๊ฑฐ์๋ ์๋ ๋น์ด ์๋ ๋น์ ๋ฎ์ด๋ฒ๋ ธ์ง๋ง, ์ต๊ทผ์๋ BeanDefinitionOverrideException ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๐ reference
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ๋กฌ๋ณต(Lombok), @RequiredArgsConstructor๋ฅผ ์ฌ์ฉํ ์์ฑ์ ์ฃผ์ (0) | 2025.02.04 |
---|---|
[Spring] Bean Scope (0) | 2025.01.22 |
[Spring] Spring @Transactional ์ธ๋ถ ์ค์ (0) | 2025.01.14 |
[Spring] Transaction, Spring์์ ์ ๊ณตํ๋ Transaction ํต์ฌ ๊ธฐ์ (0) | 2025.01.10 |
[Spring] Transaction(ํธ๋์ญ์ ) (0) | 2025.01.09 |