2012-11-01 2 views
2

childclass에서 구현 된 메소드에 pointcut을 적용하려고하지만이 Pointcut에서 AspectMethod가 호출되지 않습니다.Pointcut이 추상 메소드에 적용되지 않음

public abstract class ParentClass { 
    protected abstract void buildResponse(QueryResponse qryResp,ContentSearchServiceResponseImpl cssResp); 
} 


public class ChildClass extends ParentClass { 
@override  
public void buildResponse(QueryResponse qryResp,ContentSearchServiceResponseImpl ssResp){ 
//doSomething 
} 

포인트 컷 :

<aop:pointcut id="pointcutId" 
      expression="execution(public * ParentClass.buildResponse(..))" /> 

또는

이 화면 위의 포인트 컷의 어떤 구성
<aop:pointcut id="pointcutId" 
      expression="execution(protected * ParentClass.buildResponse(..))" /> 

또는

<aop:pointcut id="pointcutId" 
      expression="execution(public * ParentClass+.buildResponse(..))" /> 

은 다음 내 구성 및 코드 되지 않는 created.I 내가

답변

4

execution(public * buildResponse(..)) && within(ParentClass+) 
보십시오이 추상 메소드를 구현하고 있기 때문에 내 경우 여러 자식 클래스에서 직접 아이 클래스의 이름을 사용할 수 없습니다 ... 사람이에 대한 몇 가지 생각을 갖고 모든 걸 거의 시도

나 또한

execution(public * buildResponse(..)) && target(ParentClass+) 

는 "표준"봄의 프록시 기반 AOP를 사용하는 경우 클래스 내부 내부 전화는 (하나의 방법은 같은 클래스의 다른 메소드를 호출하는) 어떤 조언이 적용되지 않습니다 것을 명심

.

+0

감사합니다. 마지막 세 줄이 주요 문제 해결사입니다. 내 전화는 내부 전화이며 나는 그들에게 pointcut을 적용하려고 노력했다. 그런 방법들을 다루는 다른 방법이 있는가? –

+1

예, aspectj로드 타임 짜기 또는 컴파일 타임 짜기를 사용하십시오. 자세한 내용은 [여기] (http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-aj-ltw)를 참조하십시오. – pap

관련 문제