2011-11-22 4 views
10

Thinker.javajava.lang.IllegalArgumentException: błąd przy :: 0 formalny niezwiązany z punktu przekroju

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 (wiosna)

mam włączone <aop:aspectj-autoproxy/> w moim pliku XML.

mam następujący komunikat o błędzie

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

Odpowiedz

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

powinny być

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

Po prostu nie mogę w to uwierzyć! operator "i" jest poprawny w konfiguracji xml, ale nie w wersji z adnotacjami. Dzięki! –

1
@Before("thinking(thoughts)") 

powinny być

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

W henever java.lang.IllegalArgumentException: formalne niezwiązane w problemie podobnym do punkcika, to wtedy sprawdź strukturę twojej porady lub wyrażenia pointcut w maksymalnych przypadkach błąd będzie sam. ?

0

Jednakże, jeśli parametry każdej metody nie są takie same, jak to zrobić

Powiem ci:

Wiosna używa adnotacji adnotacji przy użyciu interfejsu JoinPoint deklarację w aopalliance.jar: org.aopalliance.intercept.Joinpoint.

Konfiguracja xml jest używana Joinjoint.jar Instrukcja dołączenia: org.aspectj.lang.JoinPoint.

Powinieneś użyć metody JoinPoint aspektj w metodzie.

+1

Ta odpowiedź prawdopodobnie przydałaby się z formatowaniem "wbudowanym" lub blokowym, aby uczynić go bardziej czytelnym. Nie zapominaj, że sprawa i pisownia są również ważne. – halfer