Spring - BeanDefinition

목차

BeanDefinition

스프링 컨테이너는 BeanDefinition 을 이용해 스플링 빈을 생성합니다.

스프링 컨테이너는 BeanDefinition 에 정의된 빈 메타정보를 이용해 스프링 빈을 생성합니다. 빈 메타 정보는 XML, 자바코드 등으로 작성되며 @Bean, <bean> 당 하나씩 메타정보가 생성됩니다. 스프링은 정의된 메타정보들을 읽어와 BeanDefinition 을 생성합니다.

서로 다른 방식으로 정의된 빈 메타정보를 BeanDefinition 으로 생성하기 위해 스프링은 다양한 BeanDefinitionReader 를 제공합니다.

AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성합니다.

GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성합니다.

새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 BeanDefinition 을 생성하면 된다.

BeanDefinition 확인

Bean을 등록하는 방법은 크게 두가지가 있다 Bean을 직접 등록하는 방법과 FactoryMethod 를 이용한 방법이 있습니다. Bean 을 직정 등록하는 방법은 XML 파일에 Bean 정보를 직정 등록하는 방식이고 FactoryMethod 를 이용한 방식은 class 와 어노테이션을 이용해 등록하는 방식입니다.

public class BeanDefinitionTest {

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

@Test
@DisplayName("빈 설정 메타정보 확인")
void findApplicationBean(){
String[] beanDefinitionNames = ac.getBeanDefinitionNames();

for(String beanDefinitionName : beanDefinitionNames){
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
System.out.println("beanDefinition = " + beanDefinition + "beanDefinition = " + beanDefinition);
}
}

}
}
Share