AOP Java - определение pointcut для любого подкласса - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь перехватить все методы из классов, которые расширяют определенный класс. Я определил свой аспект следующим образом:

@Aspect
public class LogMethodAspect implements Serializable {

@Around("execution(* org.custom.es.GenericComponent+.*(..))") {
    public Object measureExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        System.out.println(joinPoint+ " -> " + (System.currentTimeMillis() - startTime) + " ms");
        return result;
    }
}

Объявление аспекта в Spring:

<bean id="logMethodAspect" class="org.custom.es.LogMethodAspect" />

Суперкласс

package org.custom.es;

public abstract class GenericComponent {

    //some code
}

Экзамен подкласса

package org.implementation.es;

public class InformationComponent extends GenericComponent {

    //some code
}

Однако он никогда не перехватывает его. То, что я понял:

  • Боб создается.
  • Если я изменю значение аннотации @Around на объявление на основе аннотации (например, @annotation (myanotation), и использовать эту аннотацию на подклассе, она работает правильно, но я не могу go аннотировать каждый подкласс (в будущем можно будет создать больше).

Я пытался использовать опцию, приведенную в этот вопрос Как указать единый pointcut для всех классов, которые расширяют указанный c class , но он также не работает.

Спасибо за любую помощь

...