@Around("call(* org.apache.log4j.Category.debug(..))") call不存在
时间: 2024-03-23 14:40:58 浏览: 53
`@Around("call(* org.apache.log4j.Category.debug(..))")` 表示切入点表达式是 `call(* org.apache.log4j.Category.debug(..))`,但是这个表达式是错误的。
`call` 表达式是 AspectJ 中的一种切入点表达式,它用于匹配方法调用连接点。但是在 Spring AOP 中,只支持 `execution` 表达式,用于匹配方法执行连接点。
因此,如果想要在 Spring AOP 中匹配 `org.apache.log4j.Category.debug` 方法的执行连接点,可以使用以下切入点表达式:
```
@Around("execution(* org.apache.log4j.Category.debug(..))")
```
其中,`execution` 表达式可以匹配 `org.apache.log4j.Category.debug` 方法的任意执行连接点。
相关问题
@Pointcut 可以切入log4j-1.2.17.jar的org.apache.log4j.Category.debug方法吗
可以,使用`@Pointcut`和`@Around`注解可以实现切入log4j-1.2.17.jar的`org.apache.log4j.Category.debug`方法。具体实现可以参考以下代码示例:
```java
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 LogAspect {
@Pointcut("execution(public void org.apache.log4j.Category.debug(..))")
public void logPointcut() {}
@Around("logPointcut()")
public Object aroundLog(ProceedingJoinPoint joinPoint) throws Throwable {
// 在方法执行前记录日志
System.out.println("开始执行:" + joinPoint.getSignature().getName());
Object result = joinPoint.proceed();
// 在方法执行后记录日志
System.out.println("执行结束:" + joinPoint.getSignature().getName());
return result;
}
}
```
在上述代码中,使用`@Pointcut`注解定义了一个切入点,表示要切入log4j-1.2.17.jar的`org.apache.log4j.Category.debug`方法。然后使用`@Around`注解定义了一个环绕通知,实现了在方法执行前和执行后记录日志的功能。
阅读全文