2012-05-07 19 views
7

नहीं मिल रहा है मैं एओपी के लिए नया हूं। मुझे इस तरह की कुछ समस्या मिली।एओपी: java.lang.IllegalArgumentException: 0 पर त्रुटि संदर्भित पॉइंटकट

package org.suman.Aspect; 

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

@Aspect 
public class LoginAspect { 
    //@Before("execution(public String getName())") 
    //@Before("execution(public String org.suman.Model.Triangle.getName())") 
    //@Before("execution(* get*())") 
    //@Before("execution(* get*(..))") 
    //@Before("execution(* org.suman.Model.*.get*())") 

    //@Before("execution(* get*())&& within(org.suman.Model.Circle)") 
    @Before("execution(* get*())&& allCircle()") 
    //@Before("allGetters() && allCircle()") 
    public void LoginAdvice() 
    { 
     System.out.println("Advice run.. getMethod is called"); 
    } 

    @Before("execution(* get*())") 
    //@Before("allGetters()") 
    public void SecondAdvice() 
    { 
     System.out.println("this is a second Advice"); 
    } 
    @Pointcut("execution(* get*())") 
    public void allGetters(){} 

    //@Pointcut("execution (* * org.suman.Model.Circle.*(..))") 
    @Pointcut("within(org.suman.Model.Circle)") 
    public void allCircle(){} 

} 

जब pointcut, विधि allGetters() LoginAdvice विधि का उपयोग कर, अगर मैं @Before का उपयोग करें ("निष्पादन (* मिल *())") तो कोई त्रुटि लेकिन अगर मैं @Before ("allGetters (का उपयोग) ") तो देता त्रुटि" java.lang.IllegalArgumentException: :: 0 नहीं मिल सकता है संदर्भित pointcut allGetters

अगर मैं @Before का उपयोग पर त्रुटि ("निष्पादन (* मिल *()) & & (ऑर्ग के भीतर। suman.Model.Circle) ") विधि नाम के बजाय यह काम करता है।

मेरा xml इस तरह:

<?xml version="1.0" encoding="UTF-8" ?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 
    <!-- <context:annotation-config /> --> 
    <aop:aspectj-autoproxy /> 

    <bean name="triangle" class="org.suman.Model.Triangle"> 
     <property name="name" value="Triangle Name"></property> 
    </bean> 
    <bean name="circle" class="org.suman.Model.Circle"> 
     <property name="name" value="Circle name"></property> 
    </bean> 
    <bean name="shapeService" class="org.suman.Services.ShapeService" 
     autowire="byName"></bean> 
    <bean name="loginAspect" class="org.suman.Aspect.LoginAspect"></bean> 

</beans> 

है जिसके द्वारा यह विधि

+0

उन लोगों के लिए जो इस धागे पर आए और इस पृष्ठ पर प्रस्तावित समाधानों में से कोई भी काम नहीं किया, यहां एक नज़र डालने का प्रयास करें: https://stackoverflow.com/questions/21279716/error-at-0-cant-find-referenced -pointcut-annotation – rj2700

उत्तर

0

मेरा मानना ​​है कि आप के सामने एक और वाइल्डकार्ड लगाने की जरूरत है लेता pointcut साथ समस्या को हल करें:

@Pointcut("execution(* get*())") 

परिवर्तन इसे करने के लिए:

@Pointcut("execution(* *get*())") 
+0

यह वही त्रुटि देता है – user1379705

-1

पहलू संस्करण को नवीनतम में बदलें और इसे तैनात करें ...

+3

कृपया यह बताकर अपनी पोस्ट को बेहतर बनाएं कि आपकी पोस्ट समस्या क्यों हल करती है। –

0

आप पहलू जेडवेवर संस्करण 1.6.x

22

मुझे यह समस्या थी - 'प्लेसहोल्डर' विधि पर @Pointcut का उपयोग करके मुझे "संदर्भित पॉइंटकट नहीं मिला" त्रुटि दे रही थी।

बस इस से Maven निर्भरता के साथ AspectJ पुस्तकालयों को अपडेट करके हल:

<dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.5.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.5.4</version> 
    </dependency> 

इस

<dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.7.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.7.0</version> 
    </dependency> 
+3

उत्सुक लोगों के लिए यह 1.5.4 के साथ विफल रहा है और 1.7.0 के साथ काम क्यों कर रहा है: http://stackoverflow.com/a/15683358/253468 – TWiStErRob

+0

बहुत अच्छा ... इसकी असामान्य लेकिन हाँ मेरे लिए नवीनतम काम करने के लिए बदल रहा है ... धन्यवाद @ फोर्ज_7 –

+1

मैं जावा 8 का उपयोग कर रहा हूं, पहलू 1.7.0 और 1.8.10 के साथ प्रयास किया लेकिन अभी भी इस मुद्दे का सामना कर रहा है – Gopal

3

मैं एक ही समस्या thjrough भाग गया है। एक बार जब मैं aspectjweaver को aspectjweaver-1.6.11.M2.jar संस्करण के साथ प्रतिस्थापित करता हूं। सब कुछ सुचारू रूप से काम करना शुरू कर दिया।

1

समस्या जेडीके 9 के प्रारंभिक पहुंच संस्करण को चलाकर भी हो सकती है।

मेवेन जावा के एक नए संस्करण को PATH में JVM पर पसंद कर रहा है।

मेरे मामले में मैं उबंटू 15.04 पर मेवेन के माध्यम से स्वैगर 2 के साथ वसंत चला रहा हूं, और मैंने java-8-oracle और java-9-oracle (और कुछ और संस्करण) स्थापित किए हैं। java -version, PATH से व्युत्पन्न, 1.8.0_72 कहता है, फिर भी जब मैं मेवेन चलाता हूं और /usr/bin/mvn से echo JAVA_HOME बदलता हूं, तो यह /usr/lib/jvm/java-9-oracle का चयन करता है।

JAVA_HOME से /usr/lib/jvm/java-8-oracle निर्यात करना मैवेन जावा के वांछित संस्करण का उपयोग करता है, और इससे वसंत की निर्भरता इंजेक्शन तारों के लिए पॉइंटकट्स के एओपी बुनाई के साथ समस्याएं दूर हो जाती हैं।

0

मुझे यह समस्या थी क्योंकि परियोजना जावा 1.6 में संकलित की गई थी, लेकिन जावा 8 में टॉमकैट सर्वर शुरू हुआ था।

0

मुझे @Pointcut विधि नाम को तर्क के रूप में स्वीकार नहीं करने से सलाह के साथ भी इसी तरह की समस्या मिली है। मुझे निर्भरता संस्करण को बदलकर यह तय किया गया:

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjrt</artifactId> 
    <version>1.6.11</version> 
</dependency> 

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> 
<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.6.11</version> 
</dependency> 

यह मेरे लिए अभी ठीक काम कर रहा है।

संबंधित मुद्दे