๋ฐ์ํ
์คํ๋ง ๋น
์คํ๋ง ์ปจํ ์ด๋์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. - the Spring Framework documentation
์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์กฐํ
๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ
@Test
@DisplayName("๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ")
void findAllBean(){
String[] beanDefinitionNames = ac.getBeanDefinitionNames(); // ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ด๋ฆ์ ์กฐํํ๋ค.
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = ac.getBean(beanDefinitionName); // ๋น ์ด๋ฆ์ผ๋ก ๋น ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ค
System.out.println("bean = " + bean);
}
}
์ดํ๋ฆฌ์ผ์ด์ ๋น ์ถ๋ ฅํ๊ธฐ
@Test
@DisplayName("์ ํ๋ฆฌ์ผ์ด์
๋น ์ถ๋ ฅํ๊ธฐ")
void findApplicationBean(){
String[] beanDefinitionNames = ac.getBeanDefinitionNames(); // ๋ชจ๋ ๋น ์ด๋ฆ ์กฐํ
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); // bean์ ๋ฉํ์ ๋ณด
//Role ROLE_APPLICATION: ์ง์ ๋ฑ๋กํ ์ ํ๋ฆฌ์ผ์ด์
๋น
//Role ROLE_INFRASTRUCTURE: ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น
if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
Object bean = ac.getBean(beanDefinitionName); // ์ด๋ฆ์ผ๋ก ๋น ์กฐํ
System.out.println("bean = " + bean);
}
}
}
์กฐํํ ๋น์ด ๋ชจ๋ ํ์ํ ๋
private final Map<String, DiscountPolicy> policyMap; // map์ ํค์ ์คํ๋ง ๋น์ ์ด๋ฆ์ ๋ฃ์ด์ฃผ๊ณ , ๊ทธ ๊ฐ์ผ๋ก DiscountPolicy ํ์
์ผ๋ก ์กฐํํ ๋ชจ๋ ์คํ๋ง ๋น์ ๋ด์์ค๋ค.
private final List<DiscountPolicy> policies; // DiscountPolicy ํ์
์ผ๋ก ์กฐํํ ๋ชจ๋ ์คํ๋ง ๋น์ ๋ด์์ค๋ค. ๋ง์ฝ ํด๋นํ๋ ํ์
์ ์คํ๋ง ๋น์ด ์์ผ๋ฉด, ๋น ์ปฌ๋ ์
์ด๋ Map์ ์ฃผ์
ํ๋ค.
์คํ๋ง ๋น ์กฐํ
ac.getBean(๋น์ด๋ฆ, ํ์ )
ac.getBean(ํ์ )
- ์กฐํ ๋์ ์คํ๋ง ๋น์ด ์์ผ๋ฉด ์์ธ ๋ฐ์ :
NoSuchBeanDefinitionException
์คํ๋ง ๋น ์กฐํ - ๋์ผํ ํ์ ์ด ๋ ์ด์
- ํ์
์ผ๋ก ์กฐํ์ ๊ฐ์ ํ์
์ ์คํ๋ง ๋น์ด ๋ ์ด์์ด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋๋ ๋น ์ด๋ฆ์ ์ง์ ํ์. ->
ac.getBean(๋น์ด๋ฆ, ํ์ )
- ํน์ ํ์
์ ๋ชจ๋ ์กฐํํ๊ธฐ
@Test @DisplayName("ํน์ ํ์ ์ ๋ชจ๋ ์กฐํํ๊ธฐ") void findAllBeanByType() { Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class); for (String key : beansOfType.keySet()) { System.out.println(key + " " + beansOfType.get(key)); } System.out.println(beansOfType); assertThat(beansOfType.size()).isEqualTo(2); }
์คํ๋ง ๋น ์กฐํ - ์์ ๊ด๊ณ
- ๋ถ๋ชจํ์
์ผ๋ก ์กฐํํ๋ฉด, ์์ ํ์
๋ ํจ๊ป ์กฐํ๋๋ค.
- ํ์
์ผ๋ก๋ง ์กฐํ์
NoUniqueBeanDefinitionException.class
์๋ฌ ๋ฐ์
- ํ์
์ผ๋ก๋ง ์กฐํ์
๐ Reference
๋ฐ์ํ