컴퓨터 공학/프로그래밍 과외 기록

[스프링 프레임워크 과외] 3. 컨테이너 및 설정 파일(applicationContext.xml)

ITISIK 2021. 10. 4. 17:35
반응형

0. 도입

  대부분의 IoC 컨테이너는 각 컨테이너에서 관리할 객체들을 위한 별도의 설정파일이 있다. Servlet 컨테이너는 web.xml 파일에 있고, EJB 컨테이너는 ejb-jar.xml 파일에 해당 컨테이너가 생성 및 생명주기를 관리할 클래스들(bean)을 등록한다.

 

  가장 근본적은 구동 프로세스는 아래와 같다.

1) Spring 컨테이너(GenericXmlApplicationContext)를 구동한다.

2) 구동된 Spring 컨테이너로부터 필요한 객체(bean)를 요청(get)한다.

3) Spring 컨테이너 구동을 종료한다.

 

이 프로세스를 코드로 표현하면 아래와 같다.

1) AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");

2) Phone p = (Phone)factory.getBean("phone"); // p.getNumber(); 등의 기능을 수행할 수 있다.

3) factory.close();

 

1. 스프링 컨테이너의 종류

1) BeanFactory : 스프링 설정 파일에 등록된 <bean> 객체를 생성하고 관리하는 기본적인 컨테이너의 기능을 제공

2-1) BeanFactory를 상속한 ApplicationContext : BeanFactory의 기능 이외에도 트랜잭션이나 다국어 처리 등의 기능을 제공

2-2) ApplicationContext의 구현 클래스 중 가장 많이 사용하는 클래스는 아래 두 가지이다.

구현 클래스 기능
GenericXmlApplicationContext 파일시스템(FS)이나 클래스 경로에 있는 xml 파일을 로딩하여 구동
XmlWebApplicationContext 웹 기반의 스프링 어플리케이션을 개발

 

2. 스프링 XML 파일 설정

1) <beans> 루트 요소 : 스프링 설정 파일(xml)의 루트 요소이며, 네임스페이스를 비롯한 xml 스키마 관련 정보를 포함한다. 아래에 나올 <import> 요소와 <bean> 요소를 감싸고 있는 요소이기도 하다.

e.g. 

 

2) <import> 요소 : 스프링 설정 파일(xml) 하나에 모든 클래스와 기능을 적을 수도 있지만, 관리가 어렵기 때문에 여러개의 xml 파일을 작성한 뒤 <import> 요소를 활용하여 하나의 설정 파일로 통합할 때 사용한다.

e.g. <import resource="context-datasource.xml" />

 

3) <bean> 요소 : 스프링 설정 파일(xml)에 클래스를 등록할 때 사용한다. 이때 주로 id와 class 속성을 부여하며, 특히 class 속성은 필수이다.

e.g. <bean id="phone" class="com.itisik.phone"></bean>

 

3-1) <bean> 요소의 init-method 속성 : Servlet 컨테이너는 web.xml 파일에 등록된 Servlet 클래스의 객체를 생성할 때 기본 생성자만 사용하기 때문에, 멤버변수를 초기화 할 수 없다. 따라서 객체를 생성한 후에 멤버변수 초기화 작업이 필요할 때 이 속성에 멤버변수를 초기화 시키는 메서드명을 적는 것으로 사용한다.

e.g. <bean id="phone" class="com.itisik.phone" init-method="initMethod" />

 

3-2) <bean> 요소의 destroy-method 속성 : 스프링 컨테이너가 객체를 파괴(destroy)하기 직전에 호출할 메서드를 지정할 수 있다.

e.g. <bean id="phone" class="com.itisik.phone" destroy-method="destroyMethod" />

 

3-3) <bean> 요소의 lazy-init 속성 : ApplicationContext를 이용하여 컨테이너를 구동하면 컨테이너가 구동되는 시점에 스프링 설정 파일(xml)에 등록된 <bean>들을 즉시 로딩하는 방식으로 동작한다. 하지만 일부 클래스의 경우 자주 사용하지 않을 수도 있기 때문에 사용되는 시점에만 객체를 생성하는 것이 나을 수 있는데 이때 이 속성의 값을 "true"로 설정해주면 된다.

e.g. <bean id="phone" class="com.itisik.phone" lazy-init="true" />

 

3-4) <bean> 요소의 scope 속성 : 하나만 생성해도 상관 없는 객체인 경우 scope 속성의 값을 "singleton"으로 해주어, 중복 생성을 막을 수 있다. 사실 scope 속성을 명시하지 않은 경우에도 default 값이 singleton이기 때문에 굳이 적을 필요는 없다. 만약 <bean>이 요청될 때마다 매번 새 객체를 생성해야 하는 경우에는 "prototype"을 값으로 지정하면 된다.

e.g. <bean id="phone" class="com.itisik.phone" scope="prototype" />

 

반응형