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
答案 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正式未绑定在切入点
答案 5 :(得分:-4)
每当java.lang.IllegalArgumentException
:error at ::0
在切入点中出现正式未绑定问题时,请仔细检查您的建议结构,或者在最大情况下切入点的表达式错误将在那里出现。