스트라이프에서 스프링의 빈을 가져오려면 다음의 설정을 추가해야한다.

web.xml 의 스프링 필터에 스프링 인터셉터를 추가한다.

[web.xml]

<filter>
    <display-name>Stripes Filter</display-name>
    <filter-name>StripesFilter</filter-name>
    <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
    <init-param>
       <param-name>ActionResolver.Packages</param-name>
       <param-value>kr.or.ehc.kg.web</param-value>
    </init-param>
    <init-param>
            <param-name>Interceptor.Classes</param-name>
            <param-value>
                        net.sourceforge.stripes.integration.spring.SpringInterceptor
            </param-value>
     </init-param>
</filter>

 

그리고 액션 리졸버 클래스에서는 @SpringBean 어노테이션으로 스프링 빈을 가져올 수 있다.

public class ArticleAction implements ActionBean {
    ...
    @SpringBean("articleService")
    private ArticleService articleService;
    ...
}

 

물론, 메서드에 어노테이션을 지정할 수 있다. 스프링빈을 가져올 때, 관례적으로 'set스프링빈' 의 형태의 메서드를 취하나, 메서드 보안 관계상 다른 이름으로 주입하는 것도 좋은 방법이다

public class ArticleAction implments ActionBean {
     ...
    private BoardService boardService;
    @SpringBean("boardService")
    public void injectBoardService(BoardService boardService) {
        this.boardService = boardService;
    }

    ...
}


그냥 레퍼런스 보거나 스프링책 좀 정상적(?)으로 읽으면 알만한 사실이다만,
많은 사람들이 스프링으로 작성된 소스에 대해서 접근하는 것을 꺼려한다.

jsp 에서 로직을 처리하길 원하진 않지만, 급한 상황 및 테스트용도라면 로직을 뽑아내서 처리할 일도 필요할 듯하다.
물론 처리 했다면 삭제해서 정리해주는 말끔한 매너를 보여주어야지만.

1. jsp 또는 서블릿으로부터 Spring Appliation Context 를 조회한다. jsp 나 서블릿은 WebApplicationContext 를 얻을 수 있다. Web Application 이 아닌 소스에서는 XmlApplicationContext 를 이용한다.

2. 얻어온 Applicatoin Context 로부터 스프링빈을 가져온다.

아래에 샘플이 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

  import="org.springframework.web.context.WebApplicationContext"

  import="org.springframework.web.context.support.WebApplicationContextUtils"

  import="com.comas.common.mail.MailInfo"

  import="com.comas.common.mail.MailService"     

%>

<%

 

ServletContext servletContext = this.getServletContext();

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);


// custom codes

MailService mailService = (MailService)wac.getBean("mailService");

MailInfo from = new MailInfo("edms@canon-bs.co.kr", "EDMS");

MailInfo to = new MailInfo("slothink@gmail.com", "pyun");

 

mailService.send("subject", "<html><head><title>title</title></head><body>it is content</body></html>", from, to);

 

%>


자 어렵다고 불평하지 말자. 끝.

+ Recent posts