[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)
- 애플리케이션 컨텍스트
- 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 애플리케이션 기동 후에는 빈을 지연 없이 얻을 수 있음(미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장)