Я использую АОП на основе аннотаций в приложении Java Spring. Конфигурация XML вообще отсутствует (кроме log4j2.xml).
Мой первый pointcut выполняется один раз, как и ожидалось, но каждый pointcut после этого будет выполнен дважды, и я не могу понять, почему.
Вот мой класс конфигурации:
@Configuration @EnableAspectJAutoProxy
public class LoggingConfig
{
@Bean public PreProcessLogs preProcessLogs(){
return new PreProcessLogs();
}
}
и класс Aspect:
@Aspect
public class PreProcessLogs
{
@Before("execution(* <package>.preprocessor.services.DownloadService.addToDownloading(..)) " + "&& args(event)")
public void LogFTPFile(JoinPoint joinPoint, WatchEvent<?> event) {
Logger logger = (org.apache.logging.log4j.core.Logger) LogManager.getLogger(joinPoint.getSignature().getDeclaringTypeName());
logger.log(Level.INFO, event.context().toString() + " has appeared in the FTP\n");
}
@AfterReturning("execution(void <package>.preprocessor.services.DownloadService.addToDownloaded(..)) " + "&& args(filePath)")
public void logDownloadedFile(JoinPoint joinPoint, Path filePath) {
//Logger logger = (org.apache.logging.log4j.core.Logger) LogManager.getLogger(joinPoint.getSignature().getDeclaringTypeName());
//logger.log(Level.INFO, file.getFileName() + " has finished downloading");
//System.out.println(joinPoint.getSourceLocation());
System.out.println(filePath.getFileName() +" has been downloaded");
}
@After("execution(void <package>.preprocessor.services.FileTransferService.moveToStagingFolder(..)) " + "&& args(file)")
public void logFileTransfer(JoinPoint jp, Path file) {
System.out.println(file.getFileName() + " has been moved to the Staging Folder");
}
}
Таким образом, в основном @AfterReturning и @After Pointcuts выполняются дважды, а не один раз. Аннотация @Before выполняется один раз, как и ожидалось. Я пытался @Before с двумя нижними pointcut, но тот же эффект. Я также попытался определить pointcut с помощью @Pointcut, но происходит то же самое. Я также попытался указать тип, где (..)).
В конце моей привязи, пытаясь заставить это работать, пожалуйста, кто-нибудь подтолкнет меня в правильном направлении.
Спасибо.