Spring

스프링 컨테이너 (Spring Container)

신동편 2023. 7. 24. 12:37
728x90

Spring Container

 

스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다.

스프링에서는 자바 객체를 빈(Bean)이라 한다.

 

스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하며, 생성된 빈에게 추가적인 기능을 제공하는 것이다.

 

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

원래 XML을 통해 직접적으로 설정해 주어야 했지만, 스프링 부트가 등장하면서 대부분 사용하지 않게 되었다.

 


 

 

스프링 컨테이너의 종류

 

BeanFactory : 스프링의 가장 기본적인 컨테이너로, 빈의 생성과 관리에 대한 기능을 담당한다. 지연 초기화를 지원하며, 어플리케이션의 시작 시점에 모든 빈을 로드하지 않고 필요한 빈을 요청할 때마다 생성한다.

 

ApplicationContext : BeanFactory를 상속받아 확장한 컨테이너로, 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고,, BeanFactory가 제공하는 기능 외에도 다양한 부가기능을 제공한다.

 

+ 부가기능)

  • MessageSource : 메시지 다국화를 위한 인터페이스
  • EnvironmentCapable : 개발, 운영, 환경변수 등으로 나누어 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
  • ApplicationEventPublisher : 이벤트 관련 기능을 제공하는 인터페이스
  • ResourceLoader : 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회

 

ApplicationContext는 BeanFactory의 기능을 상속받는다.
ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다.
BeanFactory를 직접 사용할 일은 거의 없다.
부가기능이 포함된 ApplicationContext를 사용한다.
BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다.

 


스프링 컨테이너 생성

 

 

가장 많이 사용하는 애노테이션 기반 자바 설정 클래스는 AnnotationConfigApplicationContext 객체를 사용한다. 아래와 같이 생성자 파라미터에 설정 클래스를 넣어주어 객체를 생성한다.

new AnnotationConfigApplicationContext(AppConfig.class)

 

여기서는 AppConfig.class 를 구성 정보로 지정했다.

이를 통해 스프링 컨테이너(ApplicationContext)객체를 생성하면, 스프링 빈 저장소가 만들어 진다.

자바 코드 방식과 xml 파일 방식 모두 생성자의 파라미터에 스프링 컨테이너의 구성 정보를 담은 파일을 지정해야 한다.

 


스프링 빈 등록

 

스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다.

빈 이름은 메서드 이름을 사용한다. 또한 직접 부여할 수도 있다.(@Bean(name="memberService2"))

 

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

 


스프링 빈 의존관계 설정

스프링 컨테이너는 설정 정보를 참고해서 의존 관계를 주입(DI)한다. 단순히 메서드의 반환 객체를 받아 오는 듯 보이지만, 싱클톤을 사용한다는 차이가 있다.

 

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

https://eastlight0418.tistory.com/79

 

의존성 주입(Dependency Injection, DI)

의존관계란? "A가 B를 의존한다."는 것은 "의존대상 B가 변하면, 그것이 A에 영향을 미친다."라고 말할 수 있다. 즉, B의 기능이 추가 또는 변경되면, 그것으로 인해서 A에도 영향이 미친다는 것이다

eastlight0418.tistory.com

 

728x90