1.5.3 웹 애플리케이션의 새로운 IoC 컨테이너 구성
- 웹 환경에서는 보통 루트 애플리케이션 컨텍스트와 서블릿 애플리케이션 컨텍스트의 두 단계로 분리해 사용하는 경우가 일반적
- web.xml의 <listener>와 <servlet>에 컨텍스트의 설정 관련 정보를 넣어 웹 애플리케이션이 시작될 때 자동으로 생성되게 만
contextConfigLocation
파라미터를 이용해 XML 파일의 위치를 지정하거나, 그냥 디폴트 XML 파일인/WEB-INF/applicationContext.xml
을 사용
루트 애플리케이션 컨텍스트 등록
- <listener>를 등록해주면 디폴트 컨텍스트 클래스인
XmlWebApplicationContext
를 이용해 애플리케이션 컨텍스트를 만들고/WEB-INF/applicationContext.xml
을 설정파일로 사용
- XML 설정파일의 위치와 이름은 다르게 지정이 가능
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
applicationContext.xml
대신@Configuration
을 빈 설정 메타정보로 해서 루트 애플리케이션 컨텍스트를 생성할 떄는contextClass
와contextConfigLocation
파라미터가 필요
- 스프링 3.1에서는 루트 애플리케이션 컨텍스트의 디폴트 클래스는 XML을 사용하는
XmlWebApplicationContext
@Configuration
클래스를 설정정보로 사용하도록 만들어진AnnotationConfigWebApplicationContext
를 사용하도록 변경이 필요
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.spriongframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
- @Configuration 클래스는 contextConfigLocation 컨텍스트 파라미터 지정이 필요
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>myproject.config.AppConfig</param-value>
</context-param>
- 만약 @Configuration 클래스가 여러개인 경우 이름대신 패키지를 지정
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>myproject.config</param-value>
</context-param>
- @Configuration 클래스가 하나의 XML 설정파일이라고 생각하면 쉬움
서블릿 컨텍스트 등록
- 서블릿 컨텍스트는 DispatcherServlet 을 등록하면 만들어짐
- 루트 애플리케이션 컨텍스트와 동일하게 XmlWebApplicationContext 디폴트 클래스
- WebConfig @Configuration 클래스를 사용하려면 아래와 같이 변경
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>myproject.config.WebConfig</param-value>
</init-param>
</servlet>
- @Configuration 같은 애노테이션은
<context:annotation-config />
전용 태그에 의해 등록되는 컨테이너 인프라 빈이 스프링 컨테이너의 기능을 확장해주어 사용이 가능
AnnotationConfigWebApplicationContext
는SimpleConfig
같은@Configuration
빈을 지정하는 것으로 충분,<context:annotation-config />
이 등록해주는 빈을 기본적으로 추가해주기 때문
- 아래의 루트 애플리케이션 컨텍스트용
applicationContext.xml
을 자바로 대체하는 방법
<beans ...>
<context:component-scan base-package="myproject" />
</beans>
@Configuration
@ComponentScan("myproject")
public class AppConfig {
}
'개발서적 > 토비 스프링 3.1-Vol.2' 카테고리의 다른 글
[토비의 스프링 - Vol.2] 1장 - 1.5.5 프로퍼티 소스 (0) | 2022.01.17 |
---|---|
[토비의 스프링 - Vol.2] 1장 - 1.5.4 런타임 환경 추상화와 프로파일 (0) | 2022.01.17 |
[토비의 스프링 - Vol.2] 1장 - 1.5.2 컨테이너 인프라 빈을 위한 자바 코드 메타정보 (0) | 2022.01.17 |
[토비의 스프링 - Vol.2] 1장 - 1.5 스프링 3.1의 IoC 컨테이너와 DI (0) | 2022.01.17 |
[토비의 스프링 - Vol.2] 1장 - 1.4 기타 빈 설정 메타정보 (0) | 2022.01.17 |