[SPRING] Spring 3 MVC AOP 인터셉터를 가진 @Controller?
SPRINGSpring 3 MVC AOP 인터셉터를 가진 @Controller?
누구나 왜 주석이 달린 MVC 컨트롤러와 함께 AOP를 사용할 수 없다는 것을 알고 있습니까? (포스트 참조). @Controller는 pointcut을 추가하자마자 작동을 멈춘다. 문제는 인터셉터가 호출되지 않고, @Controller가 단순히 작동을 멈추는 것입니다 (로그에서 "매핑 된 URL 경로 [/ xx] 대신 핸들러 'Yyy'에"URL이 없습니다. 식별 된 경로 ").
handlerLapping을 통해 컨트롤러에 인터셉터를 추가하는 메커니즘이 있다는 것을 알고 있지만 내 질문은 AOP 인터셉터에만 해당됩니다. 주석 처리 된 컨트롤러가 Spring 컨테이너에서 다른 pojo처럼 pojos가 아닌가? 그 차이점은 무엇입니까? 왜?
@Controller
@RequestMapping("/user")
public class RestTestImpl implements RestTest {
@RequestMapping(value="/", method={RequestMethod.GET})
public @ResponseBody String deleteUsers(String arg) {
return "Xxxxx";
}
}
내 servlet-Context에서 나는 :
<context:component-scan base-package="org.xxx.yyy"></context:component-scan>
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
. . .
</bean>
모든 것이 잘 작동합니다.
하지만 내가 추가 할 때 :
<aop:config>
<aop:pointcut expression="execution(* org.xxx.*(..))" id="pc1"/>
<aop:advisor advice-ref="hibernateInterceptor" pointcut-ref="pc1" order="2" />
</aop:config>
컨트롤러가 컨트롤러가 아니므로 오류가 발생하지 않고 지정된 URL에 대한 바인딩이 중지됩니다.
해결법
-
==============================
1.스프링 MVC 레퍼런스 :
스프링 MVC 레퍼런스 :
허락하신다면,이 메모는 잘 숨겨져 있습니다 :-)
-
==============================
2.나는 같은 문제에 부딪쳤고 그 해결책을 발견했다.
나는 같은 문제에 부딪쳤고 그 해결책을 발견했다.
사실 컨트롤러 (@Controller로 주석 처리)와 aspect (@Aspect로 주석 처리)는 같은 Spring 컨텍스트에 있어야한다.
일반적으로 사람들은 dispatch-servlet.xml 또는 xxx-servlet.xml과 기본 applicationContext.xml의 서비스 bean (aspect 포함)에 컨트롤러를 정의합니다. 이거 작동 안 할거야.
Spring이 MVC 컨텍스트를 초기화 할 때 컨트롤러에 대한 프록시를 만들지 만, aspect가 같은 컨텍스트에 있지 않다면 Spring은 인터셉터를 생성하지 않을 것이다.
위의 설명은 의존하지 않습니다.
컨트롤러와 애스펙트가 같은 Spring 컨텍스트에있는 한 모든 조합을 테스트했습니다.
-
==============================
3.당신이 사용하고있는 Spring의 AOP 메커니즘이 목표 클래스를 프록시 클래스로 래핑하여 주석을 잃어 버리거나 원래의 주석이 짜 맞춰진 것이기 때문에 심각한 파기없이 가장 잘 추측 할 수 있습니다.
당신이 사용하고있는 Spring의 AOP 메커니즘이 목표 클래스를 프록시 클래스로 래핑하여 주석을 잃어 버리거나 원래의 주석이 짜 맞춰진 것이기 때문에 심각한 파기없이 가장 잘 추측 할 수 있습니다.
나는 더 나은 대답이있을 것이라 확신하며, 더 나은 명확한 방법을 제시 할 것이라고 생각하면서 확장 할 것입니다.
from https://stackoverflow.com/questions/5862991/spring-3-mvc-controller-with-aop-interceptors by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 JPA로 엔티티를 찾을 때 LockModeType.PESSIMISTIC_WRITE를 활성화하는 방법은 무엇입니까? (0) | 2018.12.31 |
---|---|
[SPRING] 어느 spring view resolver가 angularjs와 잘 맞습니까? (0) | 2018.12.31 |
[SPRING] 선택적으로 Spring 데이터 Rest 응답의 연관을 확장합니다. (0) | 2018.12.31 |
[SPRING] 동적 생성자 값을 갖는 스프링 빈 (0) | 2018.12.31 |
[SPRING] 웹 MVC Spring 애플리케이션의 경우 @Transactional이 컨트롤러 또는 서비스를 사용해야합니까? (0) | 2018.12.31 |