2011-11-22 1 views
10

Thinker.javajava.lang.IllegalArgumentException가 : 오류 : 0 공식적인 언 바운드에서 포인트 컷에

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(); 
} 
,210

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 (봄)을

내 XML 파일에 <aop:aspectj-autoproxy/>을 포함했다.

나는 오류 메시지 다음있어

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

답변

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

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

나는 그것을 믿을 수 없다! 'and'연산자는 xml 구성에서는 유효하지만 주석이 달린 버전에서는 유효하지 않습니다. 감사! –

1
@Before("thinking(thoughts)") 

이 있어야 할 수 있어야

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

W henever java.lang.IllegalArgumentException : error at ::0 문제는 pointcut에 문제가 생겨서 친절하게도 advice의 구조를 확인하거나 pointcut의 표현이 최대 경우에 오류가 발생합니다. ? 각 메서드의 매개 변수가 동일하지 않은 경우

그러나
0

, 어떻게 할

을 나는 당신을 말할 것이다 :

봄이 aopalliance.jar에서 joinpoint를 인터페이스 선언을 사용하여 주석 주석을 사용합니다 : org.aopalliance.intercept.Joinpoint.

xml 구성이 사용됩니다. Joinjoint.jar Join 문 : org.aspectj.lang.JoinPoint.

따라서 aspectj의 JoinPoint 메소드를 사용해야합니다.

+1

이 답변은 아마도 좀 더 읽기 쉽게하기 위해'인라인 포맷팅 '이나 블록 포맷팅과 관련이 있습니다. 그 경우와 철자법도 중요하다는 것을 잊지 마십시오. – halfer