Не отрабатывает Advice при использовании AspectJ
Пытаюсь разобраться с АОП на Java, а конкретно в использовании AspectJ.
Создал простой класс аспект SimpleAspect
с советом привязанным на выполнение метода simpleMethod()
в классе SimpleClass
.
При выполнении программы целевой метод выполняется, код из совета не выполняется. Использую последнюю версию рантайма aspectjrt-1.8.5. В чем может быть проблема или как её можно диагностировать?
SimpleAspect.java:
package com.sergey;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class SimpleAspect
{
@Pointcut("execution(* com.sergey.SimpleClass.simpleMethod(..))")
public void simpleMethodPoint(){}
@Around("simpleMethodPoint()")
public void advice(ProceedingJoinPoint joinPoint) {
System.out.println("Before: " + joinPoint.getSignature().getName());
try
{
joinPoint.proceed();
}
catch (Throwable e)
{
e.printStackTrace();
}
System.out.println("After: " + joinPoint.getSignature().getName());
}
}
SimpleClass.java:
package com.sergey;
public class SimpleClass
{
public static void simpleMethod()
{
System.out.println("Inside simpleMethod");
}
public static void main(String[] args)
{
SimpleClass.simpleMethod();
}
}
Спасибо за подсказку в комментариях:
Решение:
Для вплетения кода советов из аспектов в код необходимо использовать совместно или вместо используемого компилятора использовать компилятор ajc, который можно найти в папке с установленным AspectJ (если он установлен) или в aspectjtools.jar.
Источник: Stack Overflow на русском