스프링 IOC 컨테이너
Spring 애플리케이션에서 컴포넌트들의 중앙 저장소, Bean 설정 소스로 부터 Bean 정의를 읽어들이고, Bean을 구성하고 제공해주는 컨테이너. 또한 실제 IOC 컨테이너는 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트이다.
BeanFactory
스프링 프레임워크의 interface이며, 이 interface는 모든 유형의 개체를 관리할 수 있는 메커니즘을 제공한다. ApplicationContext
는 이 BeanFactory
의 하위 interface다.
특징
WebApplicationContext
같은 애플리케이션 계층 특정 컨텍스트 지원스프링 IOC 컨테이너가 관리하는 객체, Bean은 Spring IOC 컨테이너에 의해서 인스턴스화되고 조립 및 관리되는 객체이다.
특징
스프링에서 IOC 컨테이너 구성하기 위한 메타 정보를 설정해주어야한다. 기본적으로 xml 형식을 통해 컨테이너 구성하기 위한 메타 데이터를 기술할 수 있으며, 이외에도 애노테이션 기반, java 파일 기반으로 컨테이너 구성이 가능하다.
+) 추가적으로 xml형식, groovy형식, properties형식, yml형식도 가능하다
다음은 위 개념들인 기술을 사용하는 예시다.
- BookRepository 클래스 -
- BookService 클래스 -
- application.xml(metadata config) -
위 application.xml 파일의 내용과 위 class 파일들을 비교하면서 보자
먼저 <bean> 태그들이 있으며 그 안에 id, class 속성이 있다.
Bean 태그는 실제 IOC 컨테이너가 관리해줄 대상이 되는 Bean 객체들의 정보를 명시하는 태그다
<property> 태그는 다음과 같다 등록할 Bean 내부에 필드에 대한 참조를 명시하는 태그
application.xml 파일을 통해 IOC컨테이너를 구성하는 metadata 들을 기술해주었다. 비유를 하자면 application.xml은 일종의 설계도와 비슷한 역할을 해주는 것이다.
- 테스트 코드 -
ApplicationContext 구현을 통해 IOC가 관리해주는 Bean 정보들을 꺼내오는 것이 가능하다.
ClassPathXmlApplicationContext 생성자에 metadata를 기술한 application.xml의 classpath 값을 인자로 넣어주면 해당 생성자가 인자로받은 xml 파일을 읽어 IOC 컨테이너를 구현화해서 ApplicationContext 타입 변수로 받을 수 있다.
이제 이 IOC 컨테이너를 활용해서 해당 컨테이너에 관리되고 있는 Bean 객체들의 정보를 읽고, 해당 객체를 주입받는 것이 가능해진다.