Как отфильтровать возвращаемые значения метода с AspectJ? - PullRequest
1 голос
/ 30 августа 2011

Я хотел бы отфильтровать возвращаемые значения методов с аннотацией @Filter и вернуть Collection, Array или Map по определенному предикату.

Я пробовал что-то вроде:

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

Но я получаю синтаксические ошибки, если добавлю execution((java.util.Collection+ || java.util.Map+) * * (..)) к PointCut выше.

Как бы выглядело решение, предпочтительнее, когда я мог бы ошибиться, если какой-то метод был помечен @Filter, но не возвращал бы коллекцию?

1 Ответ

3 голосов
/ 30 августа 2011

Вы пытались использовать 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...