/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข
www.inflearn.com
์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์กฐํ
ApplicationContextInfoTest
public class ApplicationContextInfoTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ")
void findAllBean(){
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + " object = " + bean);
}
}
@Test
@DisplayName("์ ํ๋ฆฌ์ผ์ด์
๋น ์ถ๋ ฅํ๊ธฐ")
void findApplicationBean(){
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + " object = " + bean);
}
}
}
}
โพ ๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ
โ ์คํํ๋ฉด ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ ๋ณด๋ฅผ ์ถ๋ ฅ ํ ์ ์๋ค.
โ getBeanDefinitionNames() : ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ด๋ฆ์ ์กฐํํ๋ค.
โ getBean() : ๋น ์ด๋ฆ์ผ๋ก ๋น ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์กฐํํ๋ค.
โ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์คํ๋ง ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น๊น์ง ์ ์ฒด ์ถ๋ ฅ๋๋ค.
โพ ์ ํ๋ฆฌ์ผ์ด์ ๋น ์ถ๋ ฅํ๊ธฐ
โ ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น์ ์ ์ธํ๊ณ ๋ด๊ฐ ๋ฑ๋กํ ๋น๋ง ์ถ๋ ฅํ๋ ์ฝ๋
โ ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น์ getRole()๋ก ๊ตฌ๋ถํ ์ ์๋ค.
(ROLE_APPLICATION : ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ์ํ ๋น/ROLE_INFRASTRUCTURE : ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น)
์คํ๋ง ๋น ์กฐํ - ๊ธฐ๋ณธ
ApplicationContextBasicFindTest
public class ApplicationContextBasicFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("๋น ์ด๋ฆ์ผ๋ก ์กฐํ")
void findBeanByName(){
MemberService memberService = ac.getBean("memberService", MemberService.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("์ด๋ฆ ์์ด ํ์
์ผ๋ก ์กฐํ")
void findBeanByType(){
MemberService memberService = ac.getBean(MemberService.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("๊ตฌ์ฒด ํ์
์ผ๋ก ์กฐํ")
void findBeanByName2(){
MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("๋น ์ด๋ฆ์ผ๋ก ์กฐํ ์คํจ")
void findBeanByNameX(){
//MemberServiceImpl xxxxx = ac.getBean("xxxxx", MemberServiceImpl.class);
assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberServiceImpl.class));
}
}
โพ ๋น ์ด๋ฆ์ผ๋ก ์กฐํ
โ isInstanceOf() : ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค๋ ํ์ ์ ์ธ์คํด์ค์ธ์ง ํ์ธํ๋ ๋ฉ์๋.
โ ๋น ์ด๋ฆ์ ์ฌ์ฉํ์ฌ MemberSerive ๋น์ ์กฐํํ๊ณ ํด๋น ๋น์ด MemberServiceImple ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ํ์ธ.
โพ ์ด๋ฆ์์ด ํ์ ์ผ๋ก ์กฐํ
โ ๋น ์ด๋ฆ ์์ด ํ์ ๋ง ์ฌ์ฉํ์ฌ MemberSerive ๋น์ ์กฐํํ๊ณ ํด๋น ๋น์ด MemberServiceImple ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ํ์ธ.
โ ๊ฐ์ ํ์ ์ด ์ฌ๋ฌ๊ฐ์ผ ๊ฒฝ์ฐ `NoUniqueBeanDefinitionException`์ด ๋ฐ์ํจ.
โพ ๊ตฌ์ฒด ํ์ ์ผ๋ก ์กฐํ
โ ๋น ์ด๋ฆ์ ์ฌ์ฉํ์ฌ `MemberServiceImpl` ๋น์ ์กฐํํ๊ณ ํด๋น ๋น์ด MemberServiceImple ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ํ์ธ.
โ ์ด ๊ฒฝ์ฐ ๋น์ ๊ตฌ์ฒดํ์ ์ผ๋ก ์กฐํ๊ฐ ๋จ(์ด๋ ๊ฒ ์กฐํํ๋ฉด ๋ณ๊ฒฝ์ ์ ์ฐ์ฑ์ด ๋จ์ด์ง)
โพ ๋น ์ด๋ฆ์ผ๋ก ์กฐํ ์คํจ
โ ์ฃผ์์ ์ ์ธํ๊ณ ํ ์คํธ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ `NoSuchBeanDefinitionException` ์๋ฌ ๋ฐ์. ์ด ์๋ฌ๋ ์กด์ฌํ์ง ์๋ ๋น์ ์กฐํํ๋ ค๊ณ ํ๋ฉด ๋ฐ์ํ๋ ์๋ฌ.
โ assertThrows : ์๋ JUnit์์ ์ ๊ณตํ๋ ๋ฉ์๋์. ํน์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํ ์คํธ์ ํต๊ณผํ๊ณ ๋ฐ์ํ์ง ์์ผ๋ฉด ์คํจ.
โ NoSuchBeanDefinitionException.class : ๊ฒ์ฆํ๋ ค๋ ์์ธ ํด๋์ค ์ง์ . ์ด ํด๋์ค์ ๊ฒฝ์ฐ ์คํ๋ง์์ ๋น์ ์ฐพ์ ์ ์์ ๋ ๋ฐ์
โ () -> ac.getBean("xxxxx", MemberServiceImpl.class) : ๊ฒ์ฆํ๋ ค๋ ์ฝ๋ ๋ธ๋ก์ ์ง์ . ac์ "xxxxx"๋ผ๋ ์ด๋ฆ์ ๋น์ MemberServiceImpl ํด๋์ค์ ํ์ ์ผ๋ก ์กฐํ.
โ ๊ฒฐ๊ณผ์ ์ผ๋ก "xxxxx" ๋ผ๋ ์ด๋ฆ์ ๋น์ด ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ํ ์คํธ ์ฑ๊ณต!