๐ ์คํ๋ง ๋น ์ถ๋ ฅ
๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ
- ์คํํ๋ฉด ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
- ac.getBeanDefinitionNames() : ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ด๋ฆ์ ์กฐํํ๋ค. -> 28๋ฒ ๋ผ์ธ
- ac.getBean(๋น์ด๋ฆ, ํ์ ) or ac.getBean(ํ์ ) : ๋น ์ด๋ฆ์ผ๋ก ๋น ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์กฐํํ๋ค. -> 35๋ฒ ๋ผ์ธ
์ ํ๋ฆฌ์ผ์ด์ ๋น ์ถ๋ ฅํ๊ธฐ
- ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น์ ์ ์ธํ๊ณ , ๋ด๊ฐ ๋ฑ๋กํ ๋น๋ง ์ถ๋ ฅํด๋ณด์.
- ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น์ getRole()๋ก ๊ตฌ๋ถํ ์ ์๋ค. -> 34๋ฒ ๋ผ์ธ
- ROLE_APPLICATION : ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ์ํ ๋น
- ROLE_INFRASTRUCTURE : ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น
๐ ์คํ๋ง ๋น ์กฐํ - ๊ธฐ๋ณธ์ ์ธ ์กฐํ๋ฐฉ๋ฒ
- ac.getBean(๋น์ด๋ฆ, ํ์ )
- ac.getBean(ํ์ )
- ์กฐํ ๋์ ์คํ๋ง์ด ์์ ๊ฒฝ์ฐ NoSuchBeanDefinitionException : No bean named '000' available
- **์ฐธ๊ณ ** ๊ตฌ์ฒด ํ์ ์ผ๋ก ์กฐํํ๋ฉด ๋ณ๊ฒฝ์ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค.
- ๋น ์ด๋ฆ์ผ๋ก ์กฐํํ๊ธฐ : findBeanByName() ๋ฉ์๋
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("๋น ์ด๋ฆ์ผ๋ก ์กฐํ")
void findBeanByName(){
MemberService memberService = ac.getBean("memberService", MemberService.class);
System.out.println("memberService = "+ memberService);
System.out.println("memberService.getClass() = "+memberService.getClass());
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
- ์ด๋ฆ์์ด ํ์ ์ผ๋ก๋ง ์กฐํ : findBeanByType() ๋ฉ์๋
@Test
@DisplayName("์ด๋ฆ์์ด ํ์
์ผ๋ก๋ง ์กฐํ")
void findBeanByType(){
MemberService memberService = ac.getBean(MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
- ๊ตฌ์ฒดํ์ ์ผ๋ก ์กฐํ : findBeanByName2() ๋ฉ์๋
@Test
@DisplayName("๊ตฌ์ฒด ํ์
์ผ๋ก ์กฐํ")
void findBeanByName2(){ //ํ์ง๋ง ๊ตฌ์ฒด์ ์์กดํ๋ TEST์ด๊ธฐ ๋๋ฌธ์ ์ข์ TEST๋ผ๊ณ ๋ ๋ณผ ์ ์์, ์ ์ฐ์ฑ์ด ๋จ์ด์ง
MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);
System.out.println("memberService = "+ memberService);
System.out.println("memberService.getClass() = "+memberService.getClass());
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
- ๋น ์ด๋ฆ์ผ๋ก ์กฐํ ์, ํด๋น ๋น์ ์ฐพ์ง ๋ชปํ๋ ๊ฒฝ์ฐ : findBeanByNameX() ๋ฉ์๋
@Test
@DisplayName("๋น ์ด๋ฆ์ผ๋ก ์กฐํX")
void findBeanByNameX(){
// MemberService memberService = ac.getBean("xxxxx", MemberService.class);
assertThrows(NoSuchBeanDefinitionException.class, ()->ac.getBean("xxxxx", MemberService.class));
// ์ค๋ฅธ์ชฝ ํญ์์ ํฐ์ง ์์ธ๊ฐ ์ผ์ชฝํญ์ด๋ผ๋ฉด test ์ฑ๊ณต
}
๐ ์คํ๋ง ๋น ์กฐํ - ๋์ผํ ํ์ ์ด ๋ ์ด์
- ํ์ ์ผ๋ก ์กฐํ์ ๊ฐ์ ํ์ ์ ์คํ๋ง ๋น์ด ๋ ์ด์์ด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. -> ์ด๋ฆ์ ์ง์ ํด์ผํ๋ค.
- ac.getBeansOfType()์ ์ฌ์ฉํ๋ฉด ํด๋น ํ์ ์ ๋ชจ๋ ๋น์ ์กฐํํ ์ ์๋ค.
- ํ์ ์ผ๋ก ์กฐํ ์, ๋น์ด ๋ ์ด์์์ผ๋ฉด ์ค๋ณต ์ค๋ฅ ๋ฐ์ : findBeanByTypeDuplicate()
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
@Test
@DisplayName("ํ์
์ผ๋ก ์กฐํ์ ๊ฐ์ ํ์
์ด ๋ ์ด์ ์์ผ๋ฉด, ์ค๋ณต ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.")
void findBeanByTypeDuplicate(){
// ac.getBean(MemberRepository.class); ์๋ฌ
assertThrows(NoUniqueBeanDefinitionException.class, ()->ac.getBean(MemberRepository.class));
}
- ํ์ ์ผ๋ก ์กฐํ ์, ๋น์ด ๋ ์ด์์์ผ๋ฉด ๋น ์ด๋ฆ์ ์ง์ : findBeanByName()
@Test
@DisplayName("ํ์
์ผ๋ก ์กฐํ์ ๊ฐ์ ํ์
์ด ๋ ์ด์์์ผ๋ฉด, ๋น ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋๋ค.")
void findBeanByName(){
MemberRepository memberRepository = ac.getBean("memberRepository1", MemberRepository.class);
assertThat(memberRepository).isInstanceOf(MemberRepository.class);
}
- ํน์ ํ์ ์ ๋ชจ๋ ์กฐํ : findAllBeanByName()
@Test
@DisplayName("ํน์ ํ์
์ ๋ชจ๋ ์กฐํํ๊ธฐ")
void findAllBeanType(){
Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = "+ key + " value = " + beansOfType.get(key));
}
System.out.println("beansOfType = "+beansOfType);
assertThat(beansOfType.size()).isEqualTo(2);
}
๐ ์คํ๋ง ๋น ์กฐํ - ์์๊ด๊ณ
- ๋ถ๋ชจ ํ์ ์ผ๋ก ์กฐํํ๋ฉด , ์์ ํ์ ๋ ํจ๊ป ์กฐํ๋๋ค.
- ๊ทธ๋์ ๋ชจ๋ ์๋ฐ ๊ฐ์ฒด์ ์ต๊ณ ๋ถ๋ชจ์ธ Object ํ์ ์ผ๋ก ์กฐํํ๋ฉด, ๋ชจ๋ ์คํ๋ง ๋น์ ์กฐํํ๋ค.
- ๋ถ๋ชจ ํ์ ์ผ๋ก ์กฐํ์, ์์์ด ๋ ์ด์์ด๋ฉด ์ค๋ณต ์ค๋ฅ ๋ฐ์ : findBeanByParentTypeDuplicate() NoUniqueBeanDefinitionException
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํ์, ์์์ด ๋ ์ด์ ์์ผ๋ฉด, ์ค๋ณต ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.")
void findBeanByParentTypeDuplicate(){
assertThrows(NoUniqueBeanDefinitionException.class, ()-> ac.getBean(DiscountPolicy.class));
}
- ๋ถ๋ชจ ํ์ ์ผ๋ก ์กฐํ์, ์์์ด ๋ ์ด์์ด๋ฉด ๋น ์ด๋ฆ ์ง์ : findBeanByParentTypeBeanName()
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ ์กฐํ์, ์์์ด ๋ ์ด์ ์์ผ๋ฉด, ๋น ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋๋ค.")
void findBeanByParentTypeBeanName(){
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
- ํน์ ํ์ ํ์ ์ ์กฐํ : findBeanBySubType()
@Test
@DisplayName("ํน์ ํ์ ํ์
์ ์กฐํ") //์ข์ TEST๋ ์๋
void findBeanBySubType(){
RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class);
assertThat(bean).isInstanceOf(RateDiscountPolicy.class);
}
- ๋ถ๋ชจ ํ์ ์ผ๋ก ๋ชจ๋ ์กฐํ : findAllBeanParentType()
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ๋ชจ๋ ์กฐํํ๊ธฐ")
void findAllBeanParentType(){
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);
assertThat(beansOfType.size()).isEqualTo(2);
for(String key : beansOfType.keySet()){
System.out.println("key = " + key + " value = "+ beansOfType.get(key));
}
}
- ๋ถ๋ชจ ํ์ ์ผ๋ก ๋ชจ๋ ์กฐํ - Object : findAllBeanObjectType()
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ๋ชจ๋ ์กฐํํ๊ธฐ - object") //์๋ฐ beans์ ์๋ ๊ฐ์ฒด ๋ชจ๋ ์ถ๋ ฅ๋จ
void findAllBeanObjectType(){
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for(String key : beansOfType.keySet()){
System.out.println("key = " + key + " value = "+ beansOfType.get(key));
}
}