컨테이너란??
- 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것
- 객체의 생성과 소멸을 컨트롤함
Servlet Container
- 웹버서와 통신하기 위하여 소켓을 생성하고, 특정 포트에 리스닝하고, 스트림을 생성하는 등으 복잡한 일들을 할 필요가 없게 해준다.
- servlet의 생성부터 소멸까지의 일련의 과정을 관리
- Tomcat
스프링 컨테이너
- 자바 객체를 담고 있다.
- 언제든지 스프링 컨테이너로 부터 필요한 객체를 가져와 사용
- Bean들의 생명주기를 관리
- 애플리케이션을 구성하는 Bean들을 관리하기 위해 IOC를 사용
Bean : Spring Ioc 컨테이너가 관리하는 자바 객체 (Spring에 의하여 생성되고 관리되는 자바 객체)
IOC : 객체의 생성을 특별한 관리 위임 즉 프레임워크가 해준다. 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가된다. 사용자의 제어권이 프레임워크에 있다.
종류
- 빈팩토리(BeanFactory)
- 어플리케이션 컨텍스트(ApplicationContext)
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)
- 애플리케이션 컨텍스트 : 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 애플리케이션 기동 후에는 빈을 지연없이 얻을 수 있음(Pre-Loading)