@Configuration
@Configuration์ ์คํ๋ง ์ค์ ํด๋์ค๋ฅผ ์ ์ธํ๋ ์ ๋ ธํ ์ด์ ์ ๋๋ค.
ํด๋น ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํจ์ผ๋ก์จ, ์คํ๋ง ๋น๊ณผ ๊ด๋ จ๋ ์ค์ ํด๋์ค์์ ๋ช ์ํ๋ ๊ธฐ๋ฅ๊ณผ ๋์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ํ๋ ๋ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ฐ๋ก ์ฑ๊ธํค๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋๋ค.
@Configuration๊ณผ ์ฑ๊ธํค
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() { //์คํ๋ง ๋น์ ๋ฑ๋ก๋ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ๋ฑ๋ก
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public RateDiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
์ ์ฝ๋์ ๋ฐ๋ฅด๋ฉด memberService์ orderService์์ MemoryMemberRepository๋ฅผ 2๋ฒ ํธ์ถํด์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ง์ ํ์ธํด๋ณด๋ฉด memberRepository๋ ๋จ ํ๋ฒ๋ง ํธ์ถ๋ฉ๋๋ค.
์ด๋ @Configuration์ด ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ํ์์ ๋๋ค.
@Configuration๊ณผ CGLIB
@Configuration์ CGLIB๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ง ๋น์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํด์ค๋๋ค.
CGLIB๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์กฐ์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์จ, @Configuration์ด ๋ถ์ ํด๋์ค๋ฅผ ์ค์ ํด๋์ค๊ฐ ์๋ CGLIB๋ก ์กฐ์ํ ์ฝ๋๋ก ๋ฐ๊พธ์ด ์คํ๋ง ๋น ๊ฐ์ฒด๋ค์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํด์ค๋๋ค.
์ฆ ์์ ์์ ์ฝ๋์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฝ๋๊ฐ ์๋ํฉ๋๋ค
...
@Bean
public MemberRepository memberRepository() {
if(memoryMemberRepository๊ฐ ์ด๋ฏธ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก๋์ด ์๋ค๋ฉด){
return ์คํ๋ง ์ปจํ
์ด๋์์ ์ฐพ์์ ๋ฐํ
}
else{
๊ธฐ์กด ๋ก์ง์ ํธ์ถํด์ MemoryMemberRepository๋ฅผ ์์ฑํ๊ณ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก
return ๋ฐํ
}
}
...
@Configuration์ ์ ์ฉํ์ง ์๊ณ , @Bean๋ง ์ ์ฉํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
@Bean๋ง ์ฌ์ฉํด๋ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ง๋ง, ์ฑ๊ธํค์ด ๋ณด์ฅ๋์ง๋ ์์ต๋๋ค.
Reference
'๐๏ธ Spring > ๊ธฐ๋ณธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] @Autowired (0) | 2021.12.11 |
---|---|
[Spring] @ComponentScan (0) | 2021.12.11 |
[Spring] ์ฑ๊ธํค (feat. ์ฑ๊ธํค์ ๊ตฌํํ๋ ์ฌ๋ฌ ๋ฐฉ์) (2) | 2021.12.11 |
[Spring] ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) | 2021.12.11 |
[Spring] IoC์ DI (0) | 2021.12.11 |