2014-12-12 7 views
1

작동하지 않습니다 인터페이스에 포인트 컷 , TransactionAspect이 예상대로 작동합니다. 그러나 주석이 인터페이스에 있으면 작동하지 않습니다. 정상적인 행동인가, 아니면 내가 잘못하고있는 것이 있습니까?AspectJ를 봄으로 봄에 측면을 구성

답변

2

메소드의 어노테이션은 Java의 서브 클래스 또는 구현 클래스에 상속되지 않습니다. 이것은 그것이 효과가없는 이유를 설명 할 수 있습니다. 구현 메서드가 해당 인터페이스에서 주석을 상속 받았다고 기대할 수도 있지만 이는 사실이 아닙니다.

업데이트 : 여러 번 전에이 질문에 대답했기 때문에, 방금 문제도 Emulate annotation inheritance for interfaces and methods with AspectJ에서 해결 방법을 문서화했다.

+0

관련된 질문으로, 저는 서비스 인터페이스에'@Transactional '주석을 달았고 모든 구현 메소드는 자체 트랜잭션으로 실행됩니다. 그러나 주석이 상속되지 않는다면 어떻게 가능합니까? – ilopezluna

+1

메소드 *의 주석 *은 상속되지 않는다고 말했습니다. 클래스에는 클래스에 대해 작동하는 ['Inherited' 메타 어노테이션] (http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Inherited.html)이 있지만 인터페이스를 구현하는 클래스가 상속하지 않습니다. ['@ Transactional'은'@ Inherited' (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html)이지만 수퍼 클래스에서 아강. 인터페이스와 함께 작동하는 경우, 이것은 Spring AOP 기능인 것 같습니다. – kriegaex

0

이 작업을 수행하려면 Java 기반 구성의 경우 @EnableAspectJAutoProxy(proxyTargetClass=true) 또는 xml 기반 구성의 경우 <aop:config proxy-target-class="true"></aop:config>과 같이 aop 구성에 proxyTargetClass=true을 추가해야합니다. 이 방법으로 spring aop은 프록시를 강제로 추가합니다.