์คํ๋ง ๋น ์กฐํ - ์์ ๊ด๊ณ
๋ถ๋ชจ ํ์ ์ผ๋ก ์กฐํํ๋ฉด, ์์ ํ์ ๋ ํจ๊ป ์กฐํํ๋ค.
๊ทธ๋์ ๋ชจ๋ ์๋ฐ ๊ฐ์ฒด์ ์ต๊ณ ๋ถ๋ชจ์ธ Object ํ์ ์ผ๋ก ์กฐํํ๋ฉด, ๋ชจ๋ ์คํ๋ง ๋น์ ์กฐํํ๋ค.
์ปจํ ์ด๋ ์์ฑ
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
์คํ๋ง ์ปจํ ์ด๋๋ @Configuration ์ด ๋ถ์ TestConfig ๋ฅผ ์ค์ (๊ตฌ์ฑ) ์ ๋ณด๋ก ์ฌ์ฉํ๋ค.
TestConfig.class
@Configuration
static class TestConfig {
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
}
DiscountPolicy ํ์ ์ด ์ค๋ณต๋์๋ค
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํ์ , ์์์ด ๋ ์ด์ ์์ผ๋ฉด , ์ค๋ณต ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค")
void findBeanByParentTypeDuplicate() {
DiscountPolicy bean = ac.getBean(DiscountPolicy.class);
}
DiscountPolicy ํ์ ์ผ๋ก ์กฐํ์ NoUniqueBeanDefinitionException ์๋ฌ๊ฐ ๋ฐ์ํ๋ค
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํ์ , ์์์ด ๋ ์ด์ ์์ผ๋ฉด , ์ค๋ณต ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค")
void findBeanByParentTypeDuplicate() {
Assertions.assertThrows(NoUniqueBeanDefinitionException.class,
() -> ac.getBean(DiscountPolicy.class));
}
์์ธ ์ฒ๋ฆฌ
assertThrows : ์ด ์์ธ๊ฐ ํฐ์ ธ์ผ ์ฑ๊ณต
() -> ์ด ๋ก์ง์ ์คํ ํ์ ๋
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํ ์ , ์์์ด ๋ ์ด์ ์์ผ๋ฉด , ๋น ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋๋ค")
void findBeanByParentTypeBeanName() {
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(DiscountPolicy.class);
}
ํ์ ์ผ๋ก ์กฐํ์ ์ค๋ณต์ด ๋ฐ์ํ ๊ฒฝ์ฐ
์ด๋ฆ์ ์ง์ ํ์ฌ ์กฐํํ๋ฉด ๋๋ค
๋ถ๋ชจ ํ์ ์ผ๋ก ๋ชจ๋ ์กฐํํ๊ธฐ
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ๋ชจ๋ ์กฐํํ๊ธฐ")
void findAllBeanByParentType() {
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));
}
}
ac.getBeansOfType() ์ ์ฌ์ฉํ๋ฉด ํด๋น ํ์ ์ ๋ชจ๋ ๋น์ ์กฐํํ ์ ์๋ค.
entrySet() ๋ฉ์๋๋ key์ value์ ๊ฐ์ด ๋ชจ๋ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ณ ,
keySet() ๋ฉ์๋๋ key์ ๊ฐ๋ง ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
beansOfType.get(key) : key๊ฐ์ ์ป๋๊ฒ ์๋ beansOfType์์ key๊ฐ์ ํด๋นํ๋ value๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
Object ํ์ ์ผ๋ก ์กฐํํ๊ธฐ
@Test
@DisplayName("๋ถ๋ชจ ํ์
์ผ๋ก ๋ชจ๋ ์กฐํํ๊ธฐ - Object")
void findAllBeanByObjectType() {
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value = "+ beansOfType.get(key));
}
}
Object ํ์ ์ผ๋ก ์กฐํํ๋ฉด, ๋ชจ๋ ์คํ๋ง ๋น์ ์กฐํํ๋ค.
์๋ฐ ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฒ Object ํ์ ์ด๋ค