본문 바로가기
프로그래밍/Spring

[Spring] 스프링 컨테이너와 스프링 빈

by YuminK 2023. 7. 14.

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

 

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

ApplicationContext는 인터페이스이다. 

스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다.

AppConfig 클래스를 만들었던 것이 어노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.

 

*스프링 컨테이너를 부를 때, BeanFactory, ApplicationContext로 구분해서 이야기한다. BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다.

 

스프링 컨테이너에 스프링 빈 저장소가 있어서 빈 이름과 객체가 저장된다. 

 

*빈 이름은 항상 다른 이름을 부여해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나 기존 빈을 덮어버리는 오류가 발생한다. 

 

스프링은 빈을 생성하고, 의존 관계를 주입하는 단계가 나누어져 있따. 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존 관계 주입도 한번에 처리된다. 

 

BeanFactory와 ApplicationContext

BeanFactory

1. 스프링 컨테이너의 최상위 인터페이스다.

2. 스프링 빈을 관리하고 조회하는 역할을 담당한다.

3. getBean() 을 제공한다. 

 

ApplicationContext

1. BeanFactory 기능을 모두 상속받아서 제공한다.

2. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다.

 

정리

1. ApplicationContext는 BeanFactory의 기능을 상속받는다.

2. ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다.

3. BeanFactory를 직접 사용할 일은 거의 없다. 부가기능이 포함된 ApplicationContext를 사용한다.

4. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다.

 

스프링 빈 설정 메타 정보 - BeanDefinition

스프링은 다양한 설정 형식을 지원한다. (XML, 자바코드) BeanDefinition이라는 추상화가 있기 때문이다.

스프링 컨테이너는 자바 코드 혹은 XML을 읽어서 BeanDeifnition(빈 설정 메타정보)을 만들고 이 정보를 바탕으로 스트링 빈을 생성한다. 

 

댓글