스프링 설정 파일 생성
src/main/resources 에 Spring Bean Definition file을 추가해줍니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="polymorphism.SamsungTV" />
</beans>
bean 엘리먼트에서 가장 중요한 것은 class 입니다.
여기에 패키지 경로가 포함된 전체 클래스 경로를 지정해야합니다.
스프링 컨테이너 구동 및 테스트
package polymorphism;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TVUser {
public static void main(String[] args) {
// 1. Spring 컨테이너를 구동한다.
AbstractApplicationContext factory =
new GenericXmlApplicationContext("applicationContext.xml");
}
}
TVUser 클래스를 다음과 같이 수정합니다.
위 소스는 환경설정 파일인 applicationContext.xml을 로딩하여 스프링 컨테이너 중 GenericXmlApplicationContext를 구동했습니다.
TVUser 클래스 구동 시 applicationContext.xml 파일을 로딩한다는 메시지가 출력되며 GenericXmlApplicationContext 객체가 생성되어 스프링 컨테이너가 구동됐다는 메시지가 출력됩니다.
TVUser 클라이언트가 스프링 설정 파일을 로딩하며 컨테이너를 구동하고
스프링 설정 파일에 bean으로 등록된 SamsungTV 객체를 생성해준 뒤 getBean 메소드를 통해 tv 객체인 SamsungTV 객체를 반환하고 종료했습니다.
차후 TV를 LgTV로 바꿀 때 TVUser.java 변경 없이 applicationContext.xml 파일만 수정하여 교체하면 됩니다.
스프링 컨테이너의 종류
GenericXmlApplicationContext
: 일반적인 XML 설정 파일을 로드하여 사용하는 컨텍스트로, GenericApplicationContext의 하위 클래스입니다.
- 독립적인 환경에서 사용: 독립 실행 애플리케이션 또는 테스트 환경에서 주로 사용.
- 파일 경로 지원: 클래스패스 또는 파일 시스템 경로에서 XML 설정 파일을 로드.
- 유연성: Java 설정(registerBean())과 XML 설정을 혼합하여 사용할 수 있음.
- 웹 환경 비의존적: 웹 애플리케이션과 상관없이 작동.
GenericXmlApplicationContext context = new GenericXmlApplicationContext("classpath:applicationContext.xml");
MyBean bean = context.getBean(MyBean.class);
XmlWebApplicationContext
: WebApplicationContext의 하위 클래스이며, XML 설정을 사용하여 웹 애플리케이션에 특화된 컨텍스트입니다.
- 웹 애플리케이션 환경: ServletContext와 통합되어 동작하며, 주로 Spring MVC에서 사용.
- DispatcherServlet과의 연계: Spring MVC의 핵심 구성 요소인 DispatcherServlet이 이 컨텍스트를 초기화.
- 웹 관련 리소스 처리: ServletContext를 통해 웹 애플리케이션의 리소스(예: 웹 페이지, 서블릿 등)와 상호작용.
- XML 설정 파일: web.xml 또는 DispatcherServlet 설정에서 명시적으로 파일 경로를 정의.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
</init-param>
</servlet>
XmlWebApplicationContext은 웹 애플리케이션 개발에 사용되며 GenericXmlApplicationContext와 달리 직접 생성하지 않는 컨테이너입니다.
스프링 XML 설정
스프링 컨테이너는 <bean> 저장소에 해당하는 xml 설정 파일을 참조하여 <bean>의 생명주기를 관리하고 여러가지 서비스를 제공합니다.
따라서 이 설정 파일을 정확하게 작성하는 것이 중요합니다.
서블릿 컨테이너는 web.xml 파일에 등록된 Servlet 클래스의 객체를 생성할 때 디폴트 생성자만 인식합니다.
따라서 생성자로 Servlet 객체의 멤버변수를 초기화 할 수 없고
서블릿은 init() 메소드를 재정의하여 멤버변수를 초기화합니다.
스프링 컨테이너 역시 스프링 설정 파일에 등록된 클래스를 객체 생성할 때 디폴트 생성자를 호출합니다.
<bean> 엘리먼트에 init-method 속성을 추가해 멤버변수에 대한 초기화 작업을 처리합니다.
이외에 destroy-method 속성으로 객체를 삭제하기 직전에 호출될 메소드를 지정할 수 있고
lazy-init 속성으로 <bean> 들을 즉시 로딩하지 않고 해당 <bean>이 사용되는 시점에 생성해 메모리 관리를 효율적으로 할 수 있습니다.
scope 속성은 singleton, prototype으로 나뉘는데 <bean>을 메모리에 하나만 생성할지 아니면 매번 새로운 객체를 생성하여 반환할지 정하는 속성입니다.
'Spring' 카테고리의 다른 글
1-6. 스프링 프로젝트 구조 및 비즈니스 컴포넌트 구현 (0) | 2025.01.26 |
---|---|
1-5. 스프링 어노테이션 기반 설정 (0) | 2025.01.25 |
1-4. 스프링 의존성 주입 (0) | 2025.01.24 |
1-2. 프레임워크 개요 (0) | 2025.01.21 |
1-1. 스프링 프레임워크 시작하기 (0) | 2025.01.21 |