2011-08-30 4 views
1

@Filter 주석이있는 메서드의 반환 값을 필터링하고 Collection, Array 또는 Map을 특정 조건 자로 반환하고 싶습니다. AspectJ로 메소드의 반환 값을 필터링하는 방법은?

내가 좋아하는 뭔가를 시도 :

@Pointcut("execution(@example.annotations.Filter * *(..)) " 
      + "&& @annotation(filter) ") 
    public void filterOperation(final Filter filter) { 
     /* ... */ 
    } 

을하지만 위의 포인트 컷에 execution((java.util.Collection+ || java.util.Map+) * * (..))를 추가하면 나는 구문 오류를 얻을.

어떻게 솔루션을 좋아할 것입니까? 어떤 메서드에 @Filter이라는 주석을 달았지만 컬렉션을 반환하지 않으면 오류가 발생할 수 있습니다.

답변

3

execution((java.util.Collection+ || java.util.Map+) *.* (..))을 사용해 보셨습니까?

또는 당신은 사용할 수 있습니다

@Pointcut("execution(@example.annotations.Filter java.util.Collection+ || java.util.Map+ *(..)) " 
     + "&& @annotation(filter) ") 
public void filterOperation(final Filter filter) { 
    /* ... */ 
} 

당신은 다음과 같은 방법으로 반환 값을 처리 할 수 ​​

@AfterReturning(value="filterOperation(filter)", returning="collection") 
public void handlingReturnValue(final Filter filter, Object collection) { 
    System.out.println(collection); 
} 

하지만 Map들과 Collection들에 대해 별도의 조언을 사용하는 것이 더 좋을 것입니다 가정 :

@Pointcut("execution(@Filter java.util.Collection+ *(..)) " 
     + "&& @annotation(filter) ") 
public void filterCollection(final Filter filter) { 
    /* ... */ 
} 

@Pointcut("execution(@Filter java.util.Map+ *(..)) " 
     + "&& @annotation(filter) ") 
public void filterMap(final Filter filter) { 
    /* ... */ 
} 

@AfterReturning(value="filterCollection(filter)", returning="collection") 
public void handlingReturnCollection(final Filter filter, Collection collection) { 
    System.out.println(collection); 
} 

@AfterReturning(value="filterMap(filter)", returning="map") 
public void handlingReturnMap(final Filter filter, Map map) { 
    System.out.println(map); 
} 
+0

이제'' "name pattern"expected "이 표시됩니다. – soc

+0

좋습니다. 코드를 수정했습니다. – Constantiner

+0

여전히 동일한 오류가 발생합니다. – soc

관련 문제