В Spring AOP внутренние вызовы методов не могут быть перехвачены.
В общем коде, даже если метод processFile()
опубликован c, он вызывается из run()
. Это внутренний вызов метода / внутренний метод, который не может быть перехвачен.
Подробности можно прочитать в документации
Из-за природы на основе прокси в среде Spring AOP, вызовы внутри целевого объекта по определению не перехватываются. Для JDK-прокси могут быть перехвачены только вызовы метода интерфейса publi c на прокси
Выражение pointcut для перехвата всех вызовов внешнего метода в класс, реализующий Runnable
, будет выглядеть следующим образом
@Around("this(java.lang.Runnable) && within(com.epam.esm.processor..*)")
public Object logFileProcessing(ProceedingJoinPoint pjp) throws Throwable {
try {
return pjp.proceed();
} finally {
//log
System.out.println("****Logged");
}
}
Обозначение области видимости within()
ограничивает область применения совета.
Срез точки @Pointcut("execution(* com.epam.esm.processor.FileProcessor.processFile(java.io.File))")
действителен и будет работать, если с ним произойдет внешний вызов метода.
Надеюсь, это поможет.