AOP 혹은 인터셉터 관련 질문 입니다.

412 views
Skip to first unread message

Heo Yong-woon

unread,
Dec 10, 2010, 12:25:35 AM12/10/10
to Korea Spring User Group
안녕하세요 :D

다들 즐거운 하루 보내 시고 계시길 바랍니다.

다름이 아니라 컨트롤러 에서 modelAndView 타입의 값을 리턴해주는데
리턴되는 modelAndView 객체를 를 가로채서 중간에 값을 변경하는게 가능한지 여부를 알고 싶습니다.

modelAndView 객체를 가로채는 녀석의 역활을 modelAndView 객체 내부에 특정 메세지를 심어주는 역활을
담당합니다.

기존의 소스에 변화 없이 작업을 진행 하려고 하다보니... 나온결론이 리턴되는 modelAndView 객체 를
중간에 가로채서 변경하는 수밖에 없다고 결론이 나왔습니다.

방법이 있다면 좋겠습니다. ...

윤재진

unread,
Dec 10, 2010, 12:28:29 AM12/10/10
to ks...@googlegroups.com
interceptor를 사용하시면 될꺼 같은데...


2010년 12월 10일 오후 2:25, Heo Yong-woon <dyd...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.




--
========================================
블로그 : http://spyrogira256.textcube.com
             http://spyrogira256.blog.me
윤재진 spyrog...@gmail.com
Google Talk. spyrogira256@gmail.com
NateOn. anjff...@lycos.co.kr
Mobile. 010-9747-8761
========================================

노력

unread,
Dec 10, 2010, 4:19:27 AM12/10/10
to Korea Spring User Group
안녕하세요?
재진님 말씀데로 AOP를 사용 하시면 됩니다.

리턴된 ModelAndView 를 가로채서 작업을 진행하시면 되기에 bean 설정은 아래와 같을 것입니다.

<bean id="controllerAdvice" class="com.hjhbboy.aop.ControllerAdvice"/
>
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="controllerAdvice"/>
</list>
</property>
<property name="order" value="1"/>
</bean>

아래 소스와 같이 postHandle 메소드에서 원하시는 작업을 하시면 될것입니다.


import org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class ControllerAdvice extends HandlerInterceptorAdapter
{
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception
{
return super.preHandle(request, response, handler);
}

@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, ModelAndView
modelAndView) throws Exception
{
System.out.println(">> " + modelAndView);
super.postHandle(request, response, handler, modelAndView);
}
}

참고해보세요. 감사합니다.

Sungchul Park

unread,
Dec 10, 2010, 4:51:37 AM12/10/10
to ks...@googlegroups.com
이... 이건 AOP가 아니고 인터셉터네요. ^^

AOP와 인터셉터 모두 사용가능합니다.
인터셉터라면 postHandle에서 처리하면 되겠죠.
다만 AOP쪽이 컨트롤러와 가까운 위치에서 처리하게 되는 특징이 있습니다.
HandlerAdapter의 처리 이후에 컨트롤러가 인보크 되는 시점에 실행이 되니까
요. 반면에 인터셉터는 HandlerAdapter가 호출 되기 전과 후에 실행이 됩니다.
AOP는 동적 프록시가 생성되니 그것도 감안해야하고요.

Yong-Un Heo

unread,
Dec 10, 2010, 5:26:41 AM12/10/10
to ks...@googlegroups.com
:D 답변 감사합니다. 잘 적용해 볼게요

2010년 12월 10일 오후 6:51, Sungchul Park <gyu...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages