스프링 빈 설정 메타 정보에 대하여 알아보았다.
스프링은 어떻게 이런 다양한 설정 형식을 지원하는 것일까?
그 중심에는 BeanDefinition 이라는 추상화가 있다.
쉽게 이야기해서 역할과 구현을 개념적으로 나눈 것이다.
-XML을 읽어서 BeanDefinition을 만들면 된다.
-자바코드를 읽어서 BeanDefinition을 만들면 된다.
-스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면 된다.
BeanDefinition을 빈 설정 메타정보라 한다.
-@Bean , <bean> 당 각각 하나씩 메타정보가 생긴다.
스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.
코드레벨에서 들어가보면
AnnotationConfigApplicationContext는 AnnotatedBeanDefinitionReader 라는 것을 사용하여
자바 코드를 설정정보처럼 읽어버린다. 그렇게 BeanDefinition을 생성한다.
package hello.core;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
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("beanDefinitionName = " + beanDefinitionName + " beanDefinition = "+beanDefinition);
}
}
}
}
테스트 코드 작성을 해보았다.
콘솔에서 각종 정보들을 볼 수 있었다.
BeanDefinition을 직접 생성하여 스프링 컨테이너에 등록할 수 도 있다.
스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용하는 것이다.
'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글
27. 싱글톤 패턴 (0) | 2021.07.22 |
---|---|
26. 웹 애플리케이션과 싱글톤 (0) | 2021.07.22 |
24. 다양한 설정 형식 지원 - 자바코드, XML (0) | 2021.07.21 |
23. BeanFactory와 ApplicationContext (0) | 2021.07.20 |
22. 스프링 빈 조회 - 상속관계 (0) | 2021.07.20 |