2011-11-22 7 views
10

Thinker.javajava.lang.IllegalArgumentException: त्रुटि :: 0 औपचारिक अनबाउंड पर pointcut में

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/> शामिल किया है।

मैं त्रुटि संदेश निम्न गया

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

मैं बस इसे विश्वास नहीं कर सकता! 'और' ऑपरेटर एक्सएमएल कॉन्फ़िगरेशन में मान्य है लेकिन एनोटेटेड संस्करण में नहीं है। धन्यवाद! –

1
@Before("thinking(thoughts)") 

होना चाहिए

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

डब्ल्यू हेनवर java.lang.IllegalArgumentException: error at ::0 समस्या की तरह पॉइंटकट में औपचारिक अनबाउंड होता है तो कृपया अपनी सलाह की संरचना की जांच करें, या अधिकतम मामलों में पॉइंटकट की अभिव्यक्ति त्रुटि स्वयं ही होगी। ?

0

हालांकि, अगर प्रत्येक विधि के मानकों ही नहीं हैं, कैसे करना है

मैं आपको बता दूँगा:

स्प्रिंग aopalliance.jar में Joinpoint इंटरफ़ेस घोषणा का उपयोग कर एनोटेशन एनोटेशन का उपयोग करता है: org.aopalliance.intercept.Joinpoint।

एक्सएमएल कॉन्फ़िगरेशन का उपयोग किया जाता है Joinjoint.jar कथन में शामिल हों: org.aspectj.lang.JoinPoint।

तो, आपको विधि में पहलू के जॉइनपॉइंट का उपयोग करना चाहिए।

+1

यह उत्तर शायद कुछ 'इनलाइन स्वरूपण' या ब्लॉक स्वरूपण के साथ अधिक पठनीय बनाने के लिए कर सकता है। यह मत भूलना कि मामले और वर्तनी भी महत्वपूर्ण हैं। – halfer