2012-05-07 7 views
7

Sono nuovo ad AOP. Ho qualche problema come questo.AOP: java.lang.IllegalArgumentException: errore a :: 0 non riesce a trovare riferimento pointcut

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(){} 

} 

quando si utilizzano pointcut, i allGetters() per il metodo LoginAdvice, se uso @Before ("esecuzione (* ottenere *())") allora nessun errore, ma se uso @Before ("allGetters () ") poi dà errore" java.lang.IllegalArgumentException: errore in :: 0 allGetters pointcut non riesce a trovare riferimento

se io uso @Before ("esecuzione (* ottenere *()) & & all'interno (org. suman.Model.Circle) ") invece del nome del metodo funziona.

Il mio xml piace questo:

<?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> 

Si prega di risolvere il problema con pointcut da cui prende il metodo

+0

Per coloro che sono venuti in questa discussione e nessuna delle soluzioni proposte in questa pagina ha funzionato, prova a dare un'occhiata qui: https://stackoverflow.com/questions/21279716/error-at-0-cant-find-referenced -pointcut-annotation – rj2700

risposta

0

Credo che hai bisogno di mettere un altro jolly davanti:

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

modificarla in:

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

Si dà lo stesso errore – user1379705

-1

Cambia la versione di aspectjeaver nella versione più recente e distribuiscila ...

+3

Si prega di migliorare il tuo post spiegando perché il tuo post risolve il problema. –

0

You s dovrei cambiare la versione di aspectJWeaver per essere 1.6.x

22

Ho avuto questo problema - l'uso di @Pointcut su un metodo "segnaposto" mi dava l'errore "Impossibile trovare riferimenti puntati".

risolto semplicemente aggiornando le librerie AspectJ con le dipendenze Maven da questo:

<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> 

a questo

<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

Per i curiosi, perché non funziona con 1.5.4 e funziona con 1.7.0: http://stackoverflow.com/a/15683358/253468 – TWiStErRob

+0

Piuttosto interessante ... è insolito, ma si sta cambiando per l'ultimo ha funzionato per me ... grazie @ Forge_7 –

+1

sto usando java8, provato con aspectj 1.7.0 e 1.8.10 ma ancora di fronte al problema – Gopal

3

ho eseguito thjrough lo stesso problema. Una volta ho sostituito aspectjweaver con la versione aspectjweaver-1.6.11.M2.jar. Tutto ha iniziato a funzionare senza intoppi.

1

Il problema può anche essere causato dall'esecuzione di una versione di accesso iniziale di JDK9.

Maven potrebbe preferire una versione più recente di Java sulla JVM in PATH.

Nel mio caso sto eseguendo Spring con Swagger2 via Maven su Ubuntu 15.04 e ho installato java-8-oracle e java-9-oracle (e alcune versioni in più). Il mio java -version, derivato da PATH, dice 1.8.0_72, ma quando eseguo Maven e cambio /usr/bin/mvn a echo JAVA_HOME, mostra di aver selezionato /usr/lib/jvm/java-9-oracle.

L'esportazione di JAVA_HOME a /usr/lib/jvm/java-8-oracle ha consentito a Maven di utilizzare la versione desiderata di Java e questo ha reso i problemi con la tessitura AOP di collegamenti di punti per il cablaggio di iniezione della dipendenza di Spring.

0

Ho riscontrato questo problema perché il progetto è stato compilato in Java 1.6, ma il server tomcat è stato avviato in Java 8.

0

Ho anche riscontrato un problema simile con @Prima di non accettare il nome del metodo @Pointcut come argomento. Ho ottenuto questo risolto modificando la versione dipendenze a:

<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> 

relativo funzionamento benissimo per me, ora.

Problemi correlati