项目中的所有类都在com.aspect包中。
主要看点:
@Aspect
public class MainAspect {
@Pointcut("within(com.aspect..*)")
public void standaloneLayer(){}
}
以帐户对象作为参数的连接点的另一个方面:
@Aspect
public class AccountAspect {
@After("com.aspect.MainAspect.standaloneLayer() && args(account)")
public void pointCutForAccount(JoinPoint joinPoint, Account account){
}
}
服务层类:
@Service
public class Customer {
public void setAccountBalance(Account account) {}
}
在运行应用程序时,我遇到异常:
引起:
java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:317)
答案 0 :(得分:3)
再次交叉检查您的代码是否已导入org.aopalliance.intercept.Joinpoint而不是org.aspectj.lang.JoinPoint 注意AspectJ AOP需要导入org.aspectj.lang.JoinPoint。
答案 1 :(得分:3)
在我的情况下,原因是我导入了错误的类。确保您导入的课程为org.aspectj.lang.JoinPoint
,而不是其他任何内容。
答案 2 :(得分:0)
import org.aopalliance.intercept.Joinpoint;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class LoggingAspect {
@Before("allCircleMethods()")
public void LogginAdvice(JoinPoint joinpoint)
{
System.out.println("advice is run");
System.out.println(joinpoint.toString());
}
@Before("args(String)")
public void StringArguementMethods()
{
System.out.println("A method that takes String arguement has been called");
}
@Pointcut("execution(* get*())")
public void allgetters()
{}
@Pointcut("within(as.model.Circle)")
public void allCircleMethods()
{}
}
当我导入import org.aopalliance.intercept.Joinpoint;我在poincut错误中得到0 ubound,所以我将导入更改为org.aspect.lang.JoinPoint并且我的程序成功运行