Spring 2.5 연동
From JCFWiKi
Copyright © 2007 Daewoo Information Systems Co., Ltd. |
|
JCF는 JEE 기능을 활용하기 위해서 스프링을 핵심적으로 사용하고 있습니다. 프리젠테이션 단에서는 스트럿츠2를 사용하고 있기 때문에, 스트럿츠와 스프링 프레임워크 간의 연동이 필요하게 됩니다. 여기서는 스트럿츠2의 스프링 플러그인을 통해서 간단하게 연동하는 방법을 다룹니다. 스프링 2.5의 XML을 작성하는 상세한 방법들은 Spring 2.5 Configuration 가이드 부분을 참고하십시오. |
목차 |
[편집] 스프링 2.5를 스트럿츠와 연동하기 위해 설정해야 할 것들
- 스프링 프레임워크를 초기화 하기 위해서는 applicationContext XML 파일들을 읽어 들여야 합니다. 스프링의 XML을 읽어들여 초기화 하는 방법은 다양합니다. 여기서는 스트럿츠와 연동하기 위해 web.xml에 스프링 리스너를 정의하여 읽어 들이는 방법을 사용합니다. 스프링과 스트럿츠2를 연동하기 위한 작업은 아래와 같습니다.
- A. 스프링 관련 라이브러리 가져오기
- B. web.xml에 스프링 리스너 정의하기
- C. struts.xml에서 스프링을 오브젝트 팩토리로 지정하기
- D. applicationContext.xml 작성하기
- A,B,C번의 작업이 끝나면 스프링과 스트럿츠2가 연동될 것입니다. 액션 클래스 자체부터 스프링에서 관리할 수도 있으며, 액션 클래스에서 DI를 사용하여 의존성이 있는 클래스들을 스프링으로부터 가져올 수 있습다. 이때 주의 할 점은 스트럿츠2 에서 스프링의 관리 빈들을 가져오는 방법은 Autowired = name 이 디폴트로 설정 되어 있습니다.
- 여기서는 위의 1,2,3번을 좀더 살펴 보겠습니다.
[편집] 1. 스프링 관련 라이브러리 가져오기
- struts2-spring-plugin-2.0.11.jar
- spring-2.5.jar
- commons-logging-1.1.jar
- aopalliance-1.0.jar
- aspectjweaver-1.5.3.jar
- 기본적으로 위의 3개만 있으면 스프링의 core, context, beans, aop 기능까지는 무난히 수행됩니다. 기타 스프링의 특수한 기능들을 사용하는 경우 연관된 라이브러리를 추가해 나가면 됩니다.
[편집] 2. web.xml에 스프링 리스너 정의하기
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/applicationContext*.xml</param-value> <!-- param-value>/WEB-INF/classes/config/applicationContext*.xml</param-value --> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
- web.xml에 스프링 리스너를 등록하여 스프링을 웹 컨텍스트 상에서 초기화되도록 해야 합니다. 이때 초기화에 사용되는 applicationContext XML 파일들의 위치는 contextConfigLocation 이라는 컨텍스트 파라미터를 통해서 지정하도록 합니다.
[편집] 3. struts.xml에서 스프링을 오브젝트 팩토리로 지정하기
- 이제 스트럿츠 설정 파일에서 스프링을 연동하기 위한 설정을 해야 합니다. 기본적으로 스트럿츠에서 사용되는 모든 객체들은 구글 Guice를 통해서 생성됩니다. 이를 스프링으로 변경하기 위해서는 struts.xml에서 다음과 같이 설정하면 됩니다.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--constant name="struts.devMode" value="true" /--> <constant name="struts.objectFactory" value="spring" /> <!-- 기타 생략 --> </struts>
- 사실은 불행하게도(?) struts2-spring-plugin-2.0.11.jar가 포함하는 struts-plugin.xml 내부에 <constant name="struts.objectFactory" value="spring" />가 선언되어 있습니다. 따라서 위와 같은 코드는 중복되는 것 같지만, 스트럿츠2 가이드에는 위와 같이 나와 있기 때문에, 미래를 위해서라도 명확하게 작성하는 것이 좋겠습니다.
[편집] 4. applicationContext.xml 작성하기
- 3번까지 진행이 되었다면, 스프링과 스트럿츠2의 연동은 준비가 끝나게 됩니다. 이제는 applicationContext XML 파일에 빈 클래스들을 정의하고 사용하는 일만 남았습니다. applicationContext XML의 상세한 작성 방법은 하위 가이드인 Spring 2.5 Configuration을 참조하도록 하고, 여기서는 스트럿츠2 액션과 관련된 두 가지만 언급하겠습니다.
- 1. 스프링 빈 클래스들은 액션의 프라퍼티로 Injection 하기
- 스프링에 서비스 클래스가 등록되어 있고, 이를 액션 클래스에서 Injection의 방법으로 사용하기 위해서는 액션 클래스에 서비스 클래스를 맴버 변수로 선언하고 setter 메소드를 작성하면 됩니다. 이때 autowired = name 임을 주의하십시오.
<bean id="codeService" class="com.disc.sample.code.service.CodeServiceImpl">
public class CodeAction{ private CodeService codeService; public void setCodeService(CodeService codeService){this.codeService = codeService;} }
- 2. 액션 클래스를 스프링에서 관리하기
- 다음과 같이 액션 클래스를 스프링의 applicationContext XML에 등록하고, struts.xml 에서는 codeAction 이라는 스프링 아이디를 참조하여 액션 클래스를 정의할 수 있습니다. 주의 할점은 스트럿츠 액션 클래스는 싱글톤이 아니기 때문에 스프링 빈 클래스 정의시 singleton="flase"로 선언하도록 해야 합니다. 이와 같이 액션을 스프링에서 관리하게 되면 보안 처리 등을 스프링에서 일관성 있게 하고자 하는 경우 도움이 됩니다.
<bean id="codeAction" class="com.disc.sample.code.action.CodeAction" singleton="false">
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--constant name="struts.devMode" value="true" /--> <constant name="struts.objectFactory" value="spring" /> <package name="code" extends="struts-default" namespace="/code"> <action name="findCodes" class="codeAction"> <result>/code/viewCodes.jsp</result> </action> </package> </struts>
