개발공부/[spring]김영한_스프링입문

스프링 컨테이너와 스프링 빈_(feat.BeanDefinition)

개발자 덕구🐾 2022. 8. 4. 02:44
728x90

 

 

 

1. 스프링 컨테이너 ?

 

 

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

ApplicationContext를 스프링 컨테이너라고 한다. 

 

 

 


 

 

2. AnnotationConfigApplicationContext 와 GenericXmlApplicationContext

 

 

 

ApplicationContext는 인터페이스이다. 

 

 

JAVA : 

AnnotationConfigApplicationContext 는 인터페이스를 구현한 구현체이다. 

AnnotationConfigApplicationContext는 java 클래스를 이용해서 bean을 등록하는 방식이고 최근에 주로 사용된다.

 

 

XML :

ApplicationContext을 구현한 GenericXmlApplicationContext도 있다.

이것은 과거에 주로 사용되었으며 xml기반의 설정 파일을 필요로한다. 

 

 

XML, JAVA 코드 이외의 다른 형식의 설정파일도 가능하다. 

 

 

이렇게 다양한 형식의 설정파일이 가능한 이유가 무엇일까? 


 

 

 

 

3. BeanDefinition 

 

 

BeanDefinition은 빈 설정 메타정보라고 한다.  

 

이렇게 다양한 설정 형식을 지원할 수 있는 이유는 BeanDefinition 이라는 추상화 덕분이다.

스프링 컨테이너는 이 config가 자바코드인지, XML인지 몰라도 BeanDefinition만 알면 된다.

 

 

AnnotationConfigApplicationContext

 

1. AnnotatedBeanDefinitionReader를 사용해서 Appconfig.class를 읽고

2. BeanDefinition(빈 설정 메타정보)를 생성한다. 

그 후 스프링 컨테이너가 이 메타정보를 기반으로 스프링 빈을 생성한다. 

 

 

 

 

 

결론 :

스프링은 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용한다. 

 

 

 

반응형