-
개인 공부 후 정리 목적인 글입니다.
스프링 컨테이너
1. BeanFactory
- 스프링 설정 파일에 등록된 <bean> 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공
- 컨테이너가 구동될 때 <bean> 객체를 생성하는 것이 아니라, 클라이언트의 요청(Lookup)에 의해서만 <bean> 객체가 생성되는 지연 로딩(Lazy Loading) 방식을 사용한다.
결론적으로는 일반적인 스프링 프로젝트에서 BeanFactory를 사용할 일이 전혀 없다.
2. ApplicationContext
- BeanFactory가 제공하는 <bean> 객체 관리 기능 외에도 트랜잭션 관리나 메시지 기반의 다국어 처리 등 다양한 기능을 지원한다.
- 컨테이너가 구동되는 시점에 <bean> 등록된 클래스들을 객체 생성하는 즉시 로딩(pre-loading) 방식으로 동작한다.
- 웹 애플리케이션 개발도 지원하므로 대부분 스프링 프로젝트는 ApplicationContext 유형의 컨테이너를 이용한다.
ApplicationContext의 구현 클래스
GenericXmlApplicationContext : 파일 시스템이나 클래스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너
XmlWebApplicationContext : 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너
GenericXmlApplicationContext는 직접 객체를 생성하여 구동하는 컨테이너
XmlWebApplicationContext는 직접 생성하지 않는 컨테이너
스프링 XML
1. <beans> 루트 엘리먼트
스프링 컨테이너는 <bean> 저장소에 해당하는 XML 설정 파일을 참조하여 <bean>의 생명주기를 관리하고 여러 서비스를 제공한다.
스프링 프로젝트 전체에서 가장 중요한 역할을 담당하며, 이 설정 파일을 정확하게 작성하고 관리하는 것이 중요
2. <import> 엘리먼트
분리하여 작성한 설정 파일들을 하나로 통합할 때 <import>엘리먼트를 사용한다.
import 태그를 이용하여 여러 스프링 설정 파일을 포함함으로써 한 파일에 작성하는 것과 같은 효과를 낼 수 있다.
3. <bean> 엘리먼트
스프링 설정 파일에 클래스를 등록하려면 <bean> 엘리먼트를 사용한다. 이때 id 속성과 class 속성을 사용하는데 id 속성은 생략 가능, class 속성은 필수이다.
<bean> 엘리먼트 속성
(1) init-method 속성 : init() 메소드를 재정의하여 멤버변수를 초기화한다.
init-method 속성으로 지정된 initMethod() 메소드를 호출한다. 이 메소드에서 멤버변수에 대한 초기화 작업을 처리한다.
(2) destroy-method 속성 : 스프링 컨테이너가 객체를 삭제하기 직전에 호출될 임의의 메소드를 지정할 수 있다.
destroy-method 속성으로 지정된 destroyMethod() 메소드는 객체가 삭제되기 직전에 호출된다.
(3) lazy-init 속성
lazy-init="true"로 설정하면 스프링 컨테이너는 해당 <bean>을 미리 생성하지 않고 클라이언트가 요청하는 시점에 생성한다. => 메모리 관리를 더 효율적으로 할 수 있게 된다.
(4) scope 속성
scope 속성값은 기본이 싱글톤이다.
scope="singleton" 일 경우 => 해당 bean이 스프링 컨테이너에 의해 단 하나만 생성되어 운용되도록 한다.
scope="prototype" 일 경우 => 해당 bean이 요청될 때마다 매번 새로운 객체를 생성하여 반환한다.