@Controller 에 aop 설정
- 작성자 :
- 임*화
- 작성일 :
- 2010-11-09 17:48:49
- 조회수 :
- 2,721
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
우선 답변해 주신 사항은 정말정말 감사 드립니다..
어쩔수 없이 말씀해주신대로 interceptor 에 걸어서 url 로 체크를 해야 할거
같습니다..
저기 한가지 궁금한게 있는데요..
@Controller 로 설정된 곳에 aop를 걸려고 했는데... 에러도 안나고
아무런 동작도 안하더라구요.
..*ServiceImpl.*(..)) 이렇게 서비스단으로 바꿔주면 정상적으로 작동을 합니다.
AOP 설정파일이 현재 DispatcherServlet 으로 로딩이 되는게 아니라
ContextLoaderListener 에 의해 로딩이 됩니다..
그래서 @Controller는 DispatcherServlet 으로 로딩이 되기 때문에 그것때문인가
해서 @Controller 와 마찬가지로 DispatcherServlet 으로 로딩이 되게끔
했더니 아래와 같은 에러가 나서
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
cglib-nodep-2.1_3.jar 를 추가 해주니까 에러가 안나고 정상적으로 @Controller
단도 다 잘 돌아 갑니다..
제가 셋팅한게 제대로 된게 맞나요?? @Controller 단 AOP는 DispatcherServlet
에서 로딩하게끔 하는거요??
어쩔수 없이 말씀해주신대로 interceptor 에 걸어서 url 로 체크를 해야 할거
같습니다..
저기 한가지 궁금한게 있는데요..
@Controller 로 설정된 곳에 aop를 걸려고 했는데... 에러도 안나고
아무런 동작도 안하더라구요.
..*ServiceImpl.*(..)) 이렇게 서비스단으로 바꿔주면 정상적으로 작동을 합니다.
AOP 설정파일이 현재 DispatcherServlet 으로 로딩이 되는게 아니라
ContextLoaderListener 에 의해 로딩이 됩니다..
그래서 @Controller는 DispatcherServlet 으로 로딩이 되기 때문에 그것때문인가
해서 @Controller 와 마찬가지로 DispatcherServlet 으로 로딩이 되게끔
했더니 아래와 같은 에러가 나서
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
cglib-nodep-2.1_3.jar 를 추가 해주니까 에러가 안나고 정상적으로 @Controller
단도 다 잘 돌아 갑니다..
제가 셋팅한게 제대로 된게 맞나요?? @Controller 단 AOP는 DispatcherServlet
에서 로딩하게끔 하는거요??
A
안녕하세요.. 임경화님..
Spring AOP의 경우 proxy 방식으로 동작하기 때문에..
ServiceImpl과 같이 interface가 적용된 경우는 별도의 library 없이도 동작하도록 되어 있습니다.
이 경우는 CGLIB이라는 동적 자바 코드 생성 라이브러리가 필요합니다.
(cglib-nodep-2.2.jar 등 적용)
다음 문제는 AOP가 Controller에 적용되었지만.. 실제로 동작하지 않는 이유는 ApplicationContext의 계층구조 때문입니다.
WebApplication의 경우..
Listener를 통한 ApplicationContext가 상위(root)가 되고 DispatcherServlet에 의해 구동되는 ApplicationContext가 하위가 됩니다.
이때 component-scan 설정에 의해 상위에는 @Service와 @Repository만 등록되고 하위에는 @Controller만 등록되도록 되어 있습니다.
문제는 AOP 정의가 상위에 정의된 경우 @Service와 @Repository만 동작을 한다는 것입니다.
따라서.. 새롭게 추가하신 AOP의 경우 별도의 파일로 분리하여 DispatcherServlet에 넘겨지는 XML에 추가하시면 적용이 됩니다.
그럼.. 즐거운 하루 되십시오.
감사합니다.
Spring AOP의 경우 proxy 방식으로 동작하기 때문에..
ServiceImpl과 같이 interface가 적용된 경우는 별도의 library 없이도 동작하도록 되어 있습니다.
이 경우는 CGLIB이라는 동적 자바 코드 생성 라이브러리가 필요합니다.
(cglib-nodep-2.2.jar 등 적용)
다음 문제는 AOP가 Controller에 적용되었지만.. 실제로 동작하지 않는 이유는 ApplicationContext의 계층구조 때문입니다.
WebApplication의 경우..
Listener를 통한 ApplicationContext가 상위(root)가 되고 DispatcherServlet에 의해 구동되는 ApplicationContext가 하위가 됩니다.
이때 component-scan 설정에 의해 상위에는 @Service와 @Repository만 등록되고 하위에는 @Controller만 등록되도록 되어 있습니다.
문제는 AOP 정의가 상위에 정의된 경우 @Service와 @Repository만 동작을 한다는 것입니다.
따라서.. 새롭게 추가하신 AOP의 경우 별도의 파일로 분리하여 DispatcherServlet에 넘겨지는 XML에 추가하시면 적용이 됩니다.
그럼.. 즐거운 하루 되십시오.
감사합니다.