EEALL@ONCE
๐ฑ ์์ํ ์๋ฐ ์ฝ๋๋ก DIํ ๋ถ๋ถ ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ (์คํ๋ง ์ปจํ ์คํธ/ ์คํ๋ง ์ปจํ ์ด๋) ๋ณธ๋ฌธ
๐ฑ ์์ํ ์๋ฐ ์ฝ๋๋ก DIํ ๋ถ๋ถ ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ (์คํ๋ง ์ปจํ ์คํธ/ ์คํ๋ง ์ปจํ ์ด๋)
์ฌ์ฃ์์ค 2023. 7. 23. 14:57@Configuration
@Configuration์ Java ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๊ตฌ์ฑ์ ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ Spring์ ๊ฐ๋ ฅํ ์ฃผ์
Java ํด๋์ค์์ @Configuration ์ฃผ์์ ์ฌ์ฉํ๋ฉด ํด๋์ค์ Spring Bean ๊ตฌ์ฑ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์์์ ๋ํ๋
์ฆ ์ฌ๊ธฐ์ Bean๋ค์ด ์์ด์! ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ
@Bean
@Bean์ ์ฌ์ฉํ๋ฉด Annotated ๋ฉ์๋๊ฐ ๋ฆฌํดํ ๊ฐ์ฒด๋ฅผ Spring Bean์ผ๋ก ๊ด๋ฆฌํ๋๋ก Spring์ ์ง์
์ฆ ์ฌ๊ธฐ์ ํด๋น ์ด๋ฆ์ Bean์ผ๋ก ๊ด๋ฆฌํ ๊ฑฐ ์์ด์ ! ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ
๋ฉ์๋๋ ๋น์ ์์ฑํ๊ณ ๊ตฌ์ฑํ๊ธฐ ์ํ ํฉํ ๋ฆฌ ์ญํ ์ ํจ.
๋ฉ์๋์ ๋ฆฌํด ํ์
์ ์์ฑํ ๋น์ ํ์
์ ๋ํ๋
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
/* ๊ฐ์ ๋ถ๋ถ์ ์ ํํ ๋๋ */
@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());
}
}
๊ทธ๋ผ main method์์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MemberApp {
public static void main(String[] args) {
//AppConfig appConfig=new AppConfig();
//MemberService memberService = appConfig.memberService();
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = ac.getBean("memberService", MemberService.class);
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
}
}
AnnotationConfigApplicationContext๋ฅผ ์ฌ์ฉํ๋ฉด XML ๊ธฐ๋ฐ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ง ์๊ณ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์์ฑํ ์ ์์
์คํ๋ง ์ปจํ ์คํธ
: Spring ์ปจํ ์คํธ๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐํ์ ํ๊ฒฝ์ ๋ํ๋ด๋ ์์ ์์ค ๊ฐ๋ ์ ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ๋ด์์ ๋ค์ํ ๊ตฌ์ฑ ์์ ๋ฐ ๋น์ ์ก์ธ์คํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. Spring ์ปจํ ์คํธ๋ ApplicationContext
์ธํฐํ์ด์ค์ ์ธ์คํด์ค์ด๋ฉฐ ์ข ์์ฑ ์ฃผ์ , ๋น ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ, ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฑ์ ํฌํจํ์ฌ Spring์ ํต์ฌ ๊ธฐ๋ฅ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋
: Spring ์ปจํ ์ด๋๋ ํนํ Spring ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ Bean ๋ฐ ํด๋น ์ข ์์ฑ์ ๊ด๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ฐธ์กฐํ๋ ์ ์์ค ๊ฐ๋ ์ ๋๋ค. ์ปจํ ์ด๋๋ApplicationContext ์ธํฐํ์ด์ค์ ๊ตฌํ์ด๋ฉฐ ์ฃผ์ ์ฑ ์์ ๊ตฌ์ฑ ํ์ผ(XML ๋๋ Java ๊ธฐ๋ฐ ๊ตฌ์ฑ) ๋๋ ์ฃผ์์ ํตํด ์ ๊ณต๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น์ ์์ฑ, ๊ตฌ์ฑ ๋ฐ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
๋ณธ์ง์ ์ผ๋ก Spring ์ปจํ ์ด๋๋ Spring ์ปจํ ์คํธ์ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค. ์ปจํ ์คํธ๋ ์ปจํ ์ด๋ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ์ ํฌํจํ๋ ์ ์ฒด ๋ฐํ์ ํ๊ฒฝ์ ๋ํ๋ด๋ฉฐ ์ปจํ ์ด๋๋ ๊ฐ์ฒด ์์ฑ, ์ข ์์ฑ ์ฃผ์ ๋ฐ ๋น ๊ด๋ฆฌ์ ๊ธฐ๋ณธ ์์ ์ ๋ด๋นํฉ๋๋ค.
- Spring Context๋ ์ปจํ ์ด๋, ์ด๋ฒคํธ ์ฒ๋ฆฌ, ๊ตญ์ ํ ์ง์ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๊ตฌ์ฑ ์์ ๋ฐ ์๋น์ค๋ฅผ ํฌํจํ์ฌ Spring Framework์์ ์ ๊ณตํ๋ ์ ์ฒด ๋ฐํ์ ํ๊ฒฝ์ ์๋ฏธํฉ๋๋ค.
- Spring Container๋ ๊ตฌ์ฒด์ ์ผ๋ก IoC(Inversion of Control) ๋ฐ DI(Dependency Injection) ์์น์ ๋ฐ๋ผ Bean ๋ฐ ํด๋น ์ข ์์ฑ์ ๊ด๋ฆฌํ๋ ์ปจํ ์คํธ ๋ถ๋ถ์ ๋ํ๋ ๋๋ค.
์ฆ ์ปจํ ์คํธ ์์ ์ปจํ ์ด๋๋ค. ์ ์ฒด์ ์ธ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ ์ฅ๊ณ ๋๊น..
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
๋ด ๋ง๋๋ก ํด์:
์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๋ง๋ค๊ฑด๋ฐ, ํด๋น ์ปจํ ์คํธ ์์์ ๋ค์ํ ๊ตฌ์ฑ ์์ ๋ฐ ๋น์ ์ก์ธ์คํ๊ณ ๊ด๋ฆฌํด์ผํ๋๋ฐ, ๊ทธ ๊ตฌ์ฑ ์์๋ ๋น์ด ์์ ์ ๋ณด๊ฐ ์ ํ ์๋ ๊ณณ์ด AppCnfig.class ์ผ.
MemberService memberService = ac.getBean("memberService", MemberService.class);
๋ด ๋ง๋๋ก ํด์:
์ด์ bean๋ค์ ApplicationContext๊ฐ ๋ค ๊ด๋ฆฌํ๊ณ ์๊ณ , ๊ฑฐ๊ธฐ์ ๋ด๊ฐ ์ํ๋ Bean์ ๊บผ๋ด ์ธ๊ฑด๋ฐ,
getBean(method name, ์ํ๋ ์ ํ์ ๋น)์ ์ฌ์ฉํ๋ฉด Spring ์ปจํ
์คํธ์์ MemberService์ ํ์ ๋น์ ๊ฒ์ํ ์ ์๊ฒ ๋๋ค.
'Spring๐ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฑ ์คํ๋ง ๋น ์กฐํ - ๊ธฐ๋ณธ / ๋์ผํ ํ์ ์ด ๋ ์ด์ (0) | 2023.07.25 |
---|---|
๐ฑ ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ (0) | 2023.07.23 |
๐ฑIoC,DI,์ปจํ ์ด๋ (0) | 2023.07.23 |
๐ฑ App Config -> ์ฌ์ฉ ์์ญ / ๊ตฌ์ฑ ์์ญ (0) | 2023.07.23 |
๐ฑ AppConfig ๋ฆฌํฉํฐ๋ง (0) | 2023.07.21 |