반응형

AspectJ를 이용한 AOP는 프록시 기반에서 작동합니다.

Pointcut을 컨트롤러에 걸었는데 해당 컨트롤러가 기타 컨트롤러(MultiActionController 등..)를 상속한 경우에는 CGLIB 프록시가 아닌 JDK 프록시가 적용됩니다.


URL 맵핑을 진행하는 AbstractHandlerMethodMapping 인스턴스에서 JDK 프록시가 적용된 컨트롤러는 URL 맵핑을 하지 못합니다. 결국 해당 컨트롤러에 포함된 메서드로의 HTTP Request에 대해 톰캣이 404를 노출하게 됩니다.


이런 경우에는 CGLIB 프록시를 강제로 적용해야 합니다.


1. context 파일에 어노테이션 추가

이 방식은 AOP가 적용되는 모든 클래스에 CGLIB 프록시를 적용하는 설정입니다.

심플한 방법이나 <tx:annotation-driven/>, <aop:aspectj-autoproxy/>, <aop:config/>의 모든 설정에 CGLIB 프록시가 강제되는 문제가 있습니다.

2. 컨트롤러 클래스에 프록시 Scope 부여
원하는 클래스에만 CGLIB 프록시를 강제하고 싶을 때 사용합니다.


* 기타 정보 

CGLIB은 인터페이스가 아닌 클래스에 대해서도 동적 프록시를 생성할 수 있고 성능 또한 우수한 장점이 있습니다.


* 출처 : 

CGLIB Proxy 설명 - http://javacan.tistory.com/entry/114

Proxying mechanisms - https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-proxying

프록시 Scope 설정 - http://stackoverflow.com/questions/15568112/using-proxy-target-class-true-with-spring-beans

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • shared트위터 공유하기
  • shared
  • 카카오스토리 공유하기