IOC컨테이너
* IOC컨테이너 ( =spring )
컨테이너란? 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것
즉, 내가 작성한 코드의 처리과정을 위임받은 독립적인 존재
( 적절한 설정만 되어있다면 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 관리해준다. )
스프링 컨테이너는 스프링 프레임워크의 핵심부에 위치, 종속객체 주입을 이용하여 애플리케이션을 구성하는 컴포넌트들을 관리한다.
-> 프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로서 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다.
[ 스프링 컨테이너의 두 종류 ]
1. 빈팩토리 BeanFactory ( org.springframework.beans.facory.BeanFactory )
: DI의 기본사항을 제공하는 가장 단순한 컨테이너
팩토리의 디자인 패턴을 구현한 것. Bean팩토리는 빈을 생성하고 분배하는 책임을 지는 클래스
빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화를 하지 않는다.
BeanFactory factory = new XmlBeanFactory(new FileinputStream(“bean.xml”));
MyBean myBean = (Mybean) factory.getBean(“myBean”);
getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작, 빈의 일생이 시작된다.
2. 어플리케이션 컨텍스트 ApplicationContext ( org.springframework.context.factory.BeanFactory )
: 빈팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공하는 어플리케이션 컨텍스트
* 빈팩토리보다 더 추가적으로 제공하는 기능
- 국제화가 지원되는 텍스트 메세지를 관리해준다.
- 이미지같은 파일 지원을 로드 할 수 있는 포괄적인 방법을 제공해준다.
- 리너스로 등록된 빈에게 이벤트 발생을 알려준다.
- 가장 많이 사용되는 어플리케이션 컨텍스트 구현체
- ClassPathXmlApplicationContext : 클래스패스에 위치한 xml파일에서 컨텐스트 정의 내용을 읽어들인다.
- FileSystemxmlApplicationContext : 파일 경로로 지정된 xml파일에서 컨텐스트 정의 내용을 읽어들인다.
- XmlWebApplicationContext : 웹 어플리케이션에 포함된 xml파일에서 컨텐스트 정의 내용을 읽어들인다.
ApplicationContext context = new ClassPathXmlApplicationContext(“conf/bean.xml”);
MyBean bean = context.getBean(“myBean”);
==> 빈팩토리와 어플리케이션컨텍스트의 또 다른 차이점
- 빈 팩토리 : 처음으로 getBean()이 호출된 시점에서야 해당 빈을 생성
- 어플리케이션 컨텍스트 : 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 어플리케이션 기동 후에는 빈을 지연없이 얻을 수 있다.
( 미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장 )
IOC ( inversion of control, 제어의 역전 )
IOC란? 제어의 역전, 즉 외부에서 제어를 한다는 것 ( = 컨테이너 )
제어권이 넘어가서 객체의 생명주기를 Container들이 전담하게 된다.
-> 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미함.
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)