[펌글] STRUTS – SPRING 연계 방법

By | 8월 21, 2009

[출처] STRUTS - SPRING 연계|작성자 돌맹이

1. 코드로 서비스를 직접 받아 오기

아주 단순한 방법이다. ApplicationContext를 가져 와서 bean을 직접 찾아 온다.
스트럿츠의 action에서 직접 코딩해 준다.

1) Action 클래스는 org.springframework.web.struts.ActionSupport 를 상속해야 한다.

2) 직접 코딩

     ApplicationContext ctx = getWebApplicationContext();
     TreeService treeService = (TreeService)ctx.getBean("treeService");


특징: 스프링과 스트럿츠가 완전 따로 논다.

장점: 설정이 전혀 필요 없고 단순해서 적용이 쉽다.

단점: 스프링 프레임웍에 종속적이다. (스프링 사상에 어긋난다)

 

2. DelegatingRequestProcessor 사용하기

몇가지 설정이 필요하고 스트럿츠 action을 spring화 하는 작업이 필요하다.


1) struts-config.xml에 controller를 등록한다.

     <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

 2) action 클래스에 필요한 서비스에 대한 set 함수를 만든다. (get 함수도 만드는 것이 좋다)

     private MyService myService = null;

     public void setMyService(MyService myService) {
         this.myService = myService;
     }

 3) 스트럿츠 action을 스프링 빈 선언한다. (파일을 따로 구분하는게 좋을 듯)

     <bean name="/myTest" class="kr.co.commercei.sample.MyAction">
       <property name="myService" ref="myService"/>
     </bean>

     action 클래스의 setMyService 메소드를 통해 스프링에서 관리되는 bean중 'myService'를 세팅하는 것이다.
     name속성의 값은 스트럿츠 action 설정의 path 값과 같다.
     물론, ref에 정의된 'myService'에 대한 bean 설정이 딴 스프링 설정 파일에 선언돼 있어야 한다.


4) struts-config.xml에 plug-in을 등록한다.

  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
      <set-property property="contextConfigLocation" value="/WEB-INF/config/struts/spring-services-to-actions.xml"/>
  </plug-in>

 여기서 value 속성의 값(spring-services-to-actions.xml)은 스트럿츠의 action을 스프링의 빈 관리처럼
 선언하 는 스프링 설정파일이다. 즉, 3)번에서 설정한 파일명이다.

특징: action 객체가 스프링의 bean으로 관리된다.

장점: 스프링의 설정에는 변화가 없다.

단점: 서비스 set함수를 꼭 마련해야 한다. RequestProcessor를 사용한다.
       (다른 Request Processor를 사용할 때 문제 발생)

 

 


3. Action 관리를 Spring에 위임하기
      - 2 번과 거의 비슷하나 주체가 바뀐다.

 
1) struts-config.xml에 action 설정을 다음과 같이 한다.

<action
  path="/myTest"
  type="org.springframework.web.struts.DelegatingActionProxy"
  ......

action 클래스를 직접 선언하지 않고 스프링에서 제공되는 DelegatingActionProxy 클래스로 한다.

2) ~ 4) 번 절차는 2 번 방식과 똑같다.

 
특징: 스트럿츠가 완전히 스프링의 빈화 되어 관리된다.

장점: 스프링의 AOP 등 완벽하게 스프링의 기능을 사용할 수 있게 된다.

단점: 스트럿츠의 설정이 스프링 종속적이 된다.

  

일반적으로 3 번 째 방식이 젤 좋다고들 한다. 많은 곳에서 그 방식을 사용하는 것 같다. 그러나 의문점이 생긴다. 세번 째 방식이 과연 스프링에 비종속적인 방식일까? 스프링을 떼어 낸다면 그 수많은 action 설정을 일일이 클래스를 찾아가며 바꿔줘야 할 것이다.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments