java.lang.IllegalArgumentException:切入点处于:: 0正式未绑定时出错

时间:2011-11-22 19:07:08

标签: spring aop spring-aop

Thinker.java

package springdemo2;

public interface Thinker {
    void thinkOfSomething(String thoughts); 
}

Volunteer.java

package springdemo2;

public class Volunteer implements Thinker{
    private String thoughts;

    @Override
    public void thinkOfSomething(String thoughts) {
        this.thoughts=thoughts;
    }

    public String getThoughts(){
        return thoughts;
    }
}

MindReader.java

package springdemo2;

public interface MindReader {
    void interceptThoughts(String thoughts);

    String getThoughts();
}

Magician.java

package springdemo2;

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut;

@Aspect 
public class Magician implements MindReader {

    private String thoughts;

    @Pointcut("execution(* springdemo2."
            + "Thinker.thinkOfSomething(String)) and args(thoughts)")
    public void thinking(String thoughts){
    }

    @Override
    @Before("thinking(thoughts)")
    public void interceptThoughts(String thoughts) {
        this.thoughts=thoughts;
        System.out.println("Advice method intercepted Thoughts..."+thoughts);
    }

    @Override
    public String getThoughts() {
        return thoughts;
    }
}

XML(春)

我已将<aop:aspectj-autoproxy/>包含在我的XML文件中。

我收到了以下错误消息

 java.lang.IllegalArgumentException: error at ::0 formal unbound in
 pointcut

6 个答案:

答案 0 :(得分:13)

@Pointcut("execution(* springdemo2."
    + "Thinker.thinkOfSomething(String)) and args(thoughts)")

应该是

@Pointcut("execution(* springdemo2."
    + "Thinker.thinkOfSomething()) && args(thoughts)")

答案 1 :(得分:1)

@Before("thinking(thoughts)")

应该是

@Before("thinking(String) && args(thoughts)")

答案 2 :(得分:0)

但是,如果每种方法的参数不一样,怎么办?

我会告诉你:

Spring使用aopalliance.jar:org.aopalliance.intercept.Joinpoint中的Joinpoint接口声明来使用Annotation注释。

使用xml配置Joinjoint.jar Join语句:org.aspectj.lang.JoinPoint。

所以,你应该在方法中使用aspectj的JoinPoint。

答案 3 :(得分:0)

不要使用“和”运算符来链接方面指示符。在Java中,您可以使用“ &&”运算符。 “ and”仅在XML中可用。

答案 4 :(得分:0)

Caused by: java.lang.IllegalArgumentException: error at ::0正式未绑定在切入点 throwing="e"/>

答案 5 :(得分:-4)

每当java.lang.IllegalArgumentExceptionerror at ::0在切入点中出现正式未绑定问题时,请仔细检查您的建议结构,或者在最大情况下切入点的表达式错误将在那里出现。