Spring/Spring ๊ธฐ๋ณธ
์ต์
์ฒ๋ฆฌ ์ฃผ์
ํ ์คํ๋ง ๋น์ด ์์ด๋ ๋์ํด์ผ ํ ๋๊ฐ ์๋ค. ๊ทธ๋ฐ๋ฐ @Autowired ๋ง ์ฌ์ฉํ๋ฉด required ์ต์
์ ๊ธฐ๋ณธ๊ฐ์ด true ๋ก ๋์ด ์์ด์ ์๋ ์ฃผ์
๋์์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์๋ ์ฃผ์
๋์์ ์ต์
์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. Member๋ ์คํ๋ง ๋น์ด ์๋๋ค. @Autowired(required = false) public void setNoBean1(Member noBean1) { System.out.println("noBean1 = " + noBean1); } @Autowired(required=false) : ์๋ ์ฃผ์
ํ ๋์์ด ์์ผ๋ฉด ์์ ์ ๋ฉ์๋ ์์ฒด๊ฐ ํธ์ถ ์๋จ @Autowired public void setNoBean2(@Nullable Member noBe..
Spring/Spring ๊ธฐ๋ณธ
๋ค์ํ ์์กด๊ด๊ณ ์ฃผ์
๋ฐฉ๋ฒ ์์กด๊ด๊ณ ์ฃผ์
์ ํฌ๊ฒ 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์์ฑ์ ์ฃผ์
์์ ์ ์ฃผ์
(setter ์ฃผ์
) ํ๋ ์ฃผ์
์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
์์ฑ์ ์ฃผ์
@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; ์ด๋ฆ ๊ทธ๋๋ก ์์ฑ์๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์
๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ฑ์ ํธ์ถ์์ ์ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค. ๋ถ๋ณ, ํ์ ์์กด๊ด๊ณ์ ์ฌ์ฉ ์ค์! ์์ฑ์๊ฐ ๋ฑ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired๋ฅผ ์๋ตํด๋ ์๋ ์ฃผ์
๋๋ค. ๋ฌผ..
Spring/Spring ๊ธฐ๋ณธ
์ปดํฌ๋ํธ ์ค์บ๊ณผ ์์กด๊ด๊ณ ์๋ ์ฃผ์
์์ํ๊ธฐ @Configuration public class AppConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } ์ง๊ธ๊น์ง ์คํ๋ง ๋น์ ๋ฑ๋กํ ๋๋ ์๋ฐ ์ฝ๋์ @Bean์ด๋ XML์ ๋ฑ์ ํตํด์ ์ค์ ์ ๋ณด์ ์ง์ ๋ฑ๋กํ ์คํ๋ง ๋น์ ๋์ดํ๋ค. ์ด๋ ๊ฒ ๋ฑ๋กํด์ผ ํ ์คํ๋ง ๋น์ด ์์ญ, ์๋ฐฑ๊ฐ๊ฐ ๋๋ฉด ์ผ์ผ์ด ๋ฑ๋กํ๊ธฐ๋ ๊ท์ฐฎ๋ค ๊ทธ๋์ ์คํ๋ง์ ์ค์ ์ ๋ณด๊ฐ ์์ด๋ ์๋์ผ๋ก ์คํ๋ง ..
Spring/Spring ๊ธฐ๋ณธ
@Configuration๊ณผ ์ฑ๊ธํค AppConfig ์ฝ๋ @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } memberRepository ํธ์ถ ์ new MemoryMemberRepositroy() ํธ์ถ @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); memberService ๋น์ ๋ง๋๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด memberRepository() ๋ฅผ ํธ์ถํ๋ค. ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด new MemoryMemberRepository() ๋ฅผ ํธ์ถํ๋ค. @Bean public OrderServ..
Spring/Spring ๊ธฐ๋ณธ
์น ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ฑ๊ธํค ๋๋ถ๋ถ์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณดํต ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญ์ ํ๋ค. @Test @DisplayName("์คํ๋ง ์๋ ์์ํ DI ์ปจํ
์ด๋") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. ์กฐํ : ํธ์ถํ ๋ ๋ง๋ค ๊ฐ์ฒด๋ฅผ ์์ฑ MemberService memberService1 = appConfig.memberService(); // 2. ์กฐํ : ํธ์ถํ ๋ ๋ง๋ค ๊ฐ์ฒด๋ฅผ ์์ฑ MemberService memberService2 = appConfig.memberService(); AppConfig๋ ์์ฒญ์ ํ ๋ ๋ง๋ค ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ๋ค. // ์ฐธ์กฐ๊ฐ์ด ๋ค๋ฅธ ๊ฒ์ ํ..
Spring/Spring ๊ธฐ๋ณธ
์คํ๋ง ๋น ์ค์ ๋ฉํ ์ ๋ณด - BeanDefinition ์คํ๋ง์ ์ด๋ป๊ฒ ์ด๋ฐ ๋ค์ํ ์ค์ ํ์์ ์ง์ํ๋ ๊ฒ์ผ๊น? ๊ทธ ์ค์ฌ์๋ BeanDefinition ์ด๋ผ๋ ์ถ์ํ๊ฐ ์๋ค. ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ์ญํ ๊ณผ ๊ตฌํ์ ๊ฐ๋
์ ์ผ๋ก ๋๋ ๊ฒ์ด๋ค! XML์ ์ฝ์ด์ BeanDefinition์ ๋ง๋ค๋ฉด ๋๋ค. ์๋ฐ ์ฝ๋๋ฅผ ์ฝ์ด์ BeanDefinition์ ๋ง๋ค๋ฉด ๋๋ค. ์คํ๋ง ์ปจํ
์ด๋๋ ์๋ฐ ์ฝ๋์ธ์ง, XML์ธ์ง ๋ชฐ๋ผ๋ ๋๋ค. ์ค์ง BeanDefinition๋ง ์๋ฉด ๋๋ค. BeanDefinition ์ ๋น ์ค์ ๋ฉํ์ ๋ณด๋ผ ํ๋ค. @Bean , ๋น ๊ฐ๊ฐ ํ๋์ฉ ๋ฉํ ์ ๋ณด๊ฐ ์์ฑ๋๋ค. ์คํ๋ง ์ปจํ
์ด๋๋ ์ด ๋ฉํ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋ง ๋น์ ์์ฑํ๋ค. public class AnnotationConfigApplicationCo..
Spring/Spring ๊ธฐ๋ณธ
BeanFactory์ ApplicationContext AnnotationConfigApplicationContext : ๊ตฌํ ํด๋์ค ๊ฐ์ฒด BeanFactory ์คํ๋ง ์ปจํ
์ด๋์ ์ต์์ ์ธํฐํ์ด์ค๋ค. ์คํ๋ง ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ์ญํ ์ ๋ด๋นํ๋ค. getBean() ์ ์ ๊ณตํ๋ค. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ BeanFactory๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค. ApplicationContext BeanFactory ๊ธฐ๋ฅ์ ๋ชจ๋ ์์๋ฐ์์ ์ ๊ณตํ๋ค. ๋น์ ๊ด๋ฆฌํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ BeanFactory๊ฐ ์ ๊ณตํด์ฃผ๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๋์ ์ฐจ์ด๊ฐ ๋ญ๊น? ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋๋ ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ๊ธฐ๋ฅ์ ๋ฌผ๋ก ์ด๊ณ , ์ ๋ง์ ๋ถ๊ฐ๊ธฐ๋ฅ์ด ํ์ํ๋ค. ApplicatonContext๊ฐ ์ ๊ณตํ๋ ๋ถ๊ฐ๊ธฐ๋ฅ ๋ฉ์์ง์์ค๋ฅผ..
Spring/Spring ๊ธฐ๋ณธ
์คํ๋ง ๋น ์กฐํ - ์์ ๊ด๊ณ ๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํํ๋ฉด, ์์ ํ์
๋ ํจ๊ป ์กฐํํ๋ค. ๊ทธ๋์ ๋ชจ๋ ์๋ฐ ๊ฐ์ฒด์ ์ต๊ณ ๋ถ๋ชจ์ธ Object ํ์
์ผ๋ก ์กฐํํ๋ฉด, ๋ชจ๋ ์คํ๋ง ๋น์ ์กฐํํ๋ค. ์ปจํ
์ด๋ ์์ฑ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); ์คํ๋ง ์ปจํ
์ด๋๋ @Configuration ์ด ๋ถ์ TestConfig ๋ฅผ ์ค์ (๊ตฌ์ฑ) ์ ๋ณด๋ก ์ฌ์ฉํ๋ค. TestConfig.class @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscou..