切入点

时间:2015-05-27 14:15:59

标签: java spring-aop

项目中的所有类都在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)

3 个答案:

答案 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并且我的程序成功运行