AspectJ - 包中除一个之外的所有 类 的切入点
AspectJ - Pointcut for all classes in a package except one
我目前正在一个方法上使用以下切入点,记录对我的应用程序中每个服务方法的调用:
@Before("execution(* com.mdenis.someAppName..service..*(..))")
有问题的方法使用 Apache 记录器并且工作完美。我现在希望将这些日志记录语句也写入数据库(通过 LogEntryService class)。问题在于,这实际上是在创建 Whosebug 错误,因为记录服务包中所有内容的方法正在调用同一包内的方法。
有没有办法更改我的切入点以排除某个 class?
这个怎么样?
@Before(
"execution(* com.mdenis.someAppName..service..*(..)) && " +
"!within(*..LogEntryService)"
)
我最终将 class 切入点与注释切入点结合起来,如下所示:
@Pointcut("execution(* com.service.processes.communication.CommunicationProcess.*(..))")
private void communicationMethods() {}
@Pointcut("execution(@com.lib.annotation.Loggable * *.*(..))")
private void loggableMethods() {}
@Before("communicationMethods() && loggableMethods()")
public void logMethodCallWithParameters(JoinPoint joinPoint)
{
if (joinPoint.getArgs().length == 0)
{
logEntryService.logDebug(LogEntrySource.SERVICE, LogEntryType.MESSAGING, "Method " + joinPoint.getTarget().getClass().getCanonicalName()
+ "." + joinPoint.getSignature().getName() + " called with no argument", logger);
}
else
{
logEntryService.logDebug(LogEntrySource.SERVICE, LogEntryType.MESSAGING, "Method " + joinPoint.getTarget().getClass().getCanonicalName()
+ "." + joinPoint.getSignature().getName() + " called with argument(s) " + getArgumentString(joinPoint.getArgs()), logger);
}
}
我目前正在一个方法上使用以下切入点,记录对我的应用程序中每个服务方法的调用:
@Before("execution(* com.mdenis.someAppName..service..*(..))")
有问题的方法使用 Apache 记录器并且工作完美。我现在希望将这些日志记录语句也写入数据库(通过 LogEntryService class)。问题在于,这实际上是在创建 Whosebug 错误,因为记录服务包中所有内容的方法正在调用同一包内的方法。
有没有办法更改我的切入点以排除某个 class?
这个怎么样?
@Before(
"execution(* com.mdenis.someAppName..service..*(..)) && " +
"!within(*..LogEntryService)"
)
我最终将 class 切入点与注释切入点结合起来,如下所示:
@Pointcut("execution(* com.service.processes.communication.CommunicationProcess.*(..))")
private void communicationMethods() {}
@Pointcut("execution(@com.lib.annotation.Loggable * *.*(..))")
private void loggableMethods() {}
@Before("communicationMethods() && loggableMethods()")
public void logMethodCallWithParameters(JoinPoint joinPoint)
{
if (joinPoint.getArgs().length == 0)
{
logEntryService.logDebug(LogEntrySource.SERVICE, LogEntryType.MESSAGING, "Method " + joinPoint.getTarget().getClass().getCanonicalName()
+ "." + joinPoint.getSignature().getName() + " called with no argument", logger);
}
else
{
logEntryService.logDebug(LogEntrySource.SERVICE, LogEntryType.MESSAGING, "Method " + joinPoint.getTarget().getClass().getCanonicalName()
+ "." + joinPoint.getSignature().getName() + " called with argument(s) " + getArgumentString(joinPoint.getArgs()), logger);
}
}