EEALL@ONCE
๐ฑ ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ ๋ณธ๋ฌธ
ApplicationContext
ApplicationContext applicationContext =new AnnotationConfigApplicationContext(AppConfig.class);
Spring Framework์์ ApplicationContext๋ Bean์ ๊ด๋ฆฌํ๊ณ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ Spring ์ปจํ ์ด๋๋ฅผ ๋ํ๋ด๋ ์ธํฐํ์ด์ค์ ๋๋ค.
1. ApplicationContext๋ ์ธํฐํ์ด์ค ์ด๋ฉฐ
2. Spring Container๋ xml ๊ธฐ๋ฐ๊ณผ annotation ๊ธฐ๋ฐ์ด ์๋ค.
3. ๋ฐ๋ผ์ AnnotationConfigApplicationContext ์ด ๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ๊ตฌํ์ฒด ์ธ๊ฑฐ๋ค.
๊ทผ๋ฐ, ๊ทธ๋ฌ๋ฉด ๋๋ ์์์ container์ context๊ฐ ์ฝ๊ฐ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ์๋๋ฐ, ์ฌ๊ธฐ์ ์ ๋ ๊ฐ๋ค๊ณ ์ ๋ ๊ฑธ๊น?
"Spring ์ปจํ ์คํธ"์ "Spring ์ปจํ ์ด๋"๋ฅผ ๋ณ๋๋ก ์ธ๊ธํ์ฌ ๊ฐ๊ฐ์ ๊ณ ์ ํ ์ธก๋ฉด์ ๊ฐ์กฐํ์ง๋ง ์ด๋ฌํ ์ฉ์ด๊ฐ Spring ํ๋ ์์ํฌ์ ์ปจํ ์คํธ์์ ์ข ์ข ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค๋ ์ ์ ๋ช ํํ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Spring ์ปจํ ์คํธ์ Spring ์ปจํ ์ด๋๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๊ณ ์ฉ์ด๊ฐ ์ข ์ข ์ํธ ๊ตํ์ ์ผ๋ก ์ฌ์ฉ๋๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก "Spring ์ปจํ ์คํธ" ๋๋ "Spring ์ปจํ ์ด๋"๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ฉ๋๋ฉฐ Spring ํ๋ ์์ํฌ์์ ๋์ผํ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ฐธ์กฐํฉ๋๋ค. ์ค์ํ ์ ์ 'ApplicationContext' ์ธํฐํ์ด์ค๋ก ํ์๋๋ Spring ์ปจํ ์คํธ๊ฐ ๋น์ ๊ด๋ฆฌํ๊ณ Spring ํ๋ ์์ํฌ์ ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ผ๊ณ ๐์ฅฃ์ค์ด ๋งํด์คฌ๋ค..์ฅฃ์ ์๋ํํ ๋์ถฉ ๋ฌป๊ณ ๋์ด๊ฐ๋ฉด ์ด๋ ๊ฒ ํผ๋์ด ์จ๋ค.. ๋ ์ง์ํ๊ฒ ๋ฌผ์ด๋ด์ผ์ง...!
๋ฌดํผ ๊ทธ๋์,
๊ทธ๋ผ ์คํ๋ง ์ปจํ ์ด๋๋ ์ด๋ป๊ฒ ์์ฑ ๋ ๊น?
์ปจํ
์ด๋๋ฅผ ์์ฑํด์ ๊ตฌ์ฑ์ ๋ณด๋ฅผ ์ฝ์ด์์ ๋น ์ ์ฅ์์ ๋น์ด๋ฆ๊ณผ ๋น๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋๋๋ค.
์ด๋, ๋น ์ด๋ฆ์ method ์ด๋ฆ / ๋น ๊ฐ์ฒด๋ ๋ฉ์๋์ return ๊ฐ์ผ๋ก ๋์ด์จ ๊ฒ์ด๋ค.
@Bean
public DiscountPolicy discountPolicy(){
return new FixDiscountPolicy();
};
์ด ๊ฒฝ์ฐ ๋น ์ด๋ฆ์ DiscountPolicy์ด๊ณ ๋น ๊ฐ์ฒด๋ FixDiscountPolicy์ด๋ค.
๋ฌผ๋ก , ๋น ์ด๋ฆ ๊ฒฝ์ฐ ์ง์ ๋ถ์ฌํ ์ ๋ ์๋ค. ์๋ฅผ ๋ค๋ฉด @Bean(name="DP") ์ด๋ ๊ฒ ๋ง์ด๋ค.
ํ์ง๋ง, ๊ทธ๋ฅ ๋ฉ์๋ ๋ค์์ ์ฐ๋๋ก ํ์.. ๋ณดํต ๊ทธ๋ ๊ฒ ์ด๋ค๊ณ ํ๋..
โ์ฃผ์์ ์ผ๋ก๋ Bean์ ์ด๋ฆ์ Uniqueํด์ผํ๋ค. ์๋๋ฉด, ๋์ผ Bean์ด ์กด์ฌ์ ์ค์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ!!
๊ทธ๋ผ ์ด์ ๋น์ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋๊ฒ์ ๋ํด ์์๋ณผํ ๋ฐ..
์คํ๋ง ๋น ์์กด๊ด๊ณ ์ค์
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy(){
return new FixDiscountPolicy();
};
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(),discountPolicy());
}