[Spring] 컨테이너

정리


컨테이너란

  • 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록하는 것
  • 객체의 생성과 소멸을 컨트롤

Servlet Container

  • 웹서버와 통신하기 위하여 소켓을 생성하고, 특정 포트에 리스닝하고, 스트림을 생성하는 등의 복잡한 일들을 할 필요가 없게 해준다.
  • servlet의 생성부터 소멸까지의 일련의 과정(Lifer Cycle)을 관리
  • 대표적인 Servlet Container - Tomcat

Spring Container

  • 자바 객체를 담고 있다.
  • 언제든지 스프링 컨테이너로 부터 필요한 객체를 가져와 사용할 수 있다.
  • Bean들의 생명주기를 관리
  • Spring Container는 어플리케이션을 구성하는 Bean들을 관리하기위해 IoC를 사용
이름 설명
IoC(Inversion of Control) 개발자는 New 연산자, 인터페이스 호출, 팩토리 호출방식으로 객체를 생성하고 소멸시킨다.
IoC란 인스턴스의 생성부터 소멸까지의 객체 생명주기 관리를 개발자가하는 대신 스프링(컨테이너)가 관리
DI(Dependency Injection) IoC를 실제로 구현하는 방법으로서 의존성있는 컴포넌트들 간의 관계를 개발자가 직접 코드로 명시하지 않고 컨테이너인 Spring이 런타임에 찾아서 연결해주게 하는 것

스프링 컨테이너 두 종류

  • 빈팩토리 BeanFactory
    • 빈을 등록하고 생성하고 조회하고 돌려주고, 그 외에 부가적인 빈을 관리하는 기능을 담당한다.
    • 빈 팩토리가 빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화를 하지 않는다
    • getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작. 여기서 빈의 일생이 시작
BeanFactory factory = new XmlBeanFactory(new FileInputStream("bean.xml"));

MyBean myBean = (Mybean) factory.getBean("myBean");
  • 어플리케이션 컨텍스트 ApplicationContext
    • 빈 팩토리를 상속한, 빈 팩토리를 확장한 향상 된 컨테이너
    • 기본적인 기능은 빈 팩토리와 동일하고 스프링이 제공하는 각종 부가 서비스를 추가로 제공
      • 국제화가 지원되는 텍스트 메시지를 관리해 준다.
      • 이미지같은 파일 자원을 로드 할 수 있는 포괄적인 방법을 제공해준다.
      • 리너스로 등록된 빈에게 이벤트 발생을 알려준다.
ApplicationContext context = new ClassPathXmlApplicationContext("conf/bean.xml");

MyBean bean = context.getBean("myBean");

빈 팩토리와 애플리케이션 컨텍스트와의 차이점

  • 빈 팩토리
    • 처음으로 getBean()이 호출된 시점에서야 해당 빈을 생성(lazy loading)
  • 애플리케이션 컨텍스트
    • 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 애플리케이션 기동 후에는 빈을 지연 없이 얻을 수 있음(미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장)

참고