2012-05-07 8 views
7

私はAOPを初めて使用しています。私はこのような問題を抱えています。AOP: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(){} 

} 

ポイントカット、LoginAdviceメソッドへのメソッドallGetters()を使用して、私は@Beforeを使用している場合( "実行(* *())を取得しない")、その後エラーを私は@Beforeを(「allGetters(使用している場合)java.lang.IllegalArgumentExceptionが ")、エラーを与える":私は(組織内@Before(「実行(*取得する*())& &を使用している場合:: 0での誤差は、参照ポイントカットallGettersに

を見つけることができません。 "メソッド名の代わりに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("execution(* get*())") 

に変更し、それを:

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

同じエラーが表示される – user1379705

-1

をaspectjeaverのバージョンを最新のものに変更して展開してください。

+3

あなたの投稿がなぜこの問題を解決するのか説明することで投稿を改善してください。 –

0

aspectJWeaverのバージョンを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> 

私は同じ問題thjrough走っこの

<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

かなり涼しい...その珍しいですが、ありがとう@ Forge_7 –

+1

私はjava8を使用して、aspectj 1.7.0と1.8.10で試しましたが、まだ問題に直面しています。 – Gopal

3

に。一度、私はaspectjweaverをaspectjweaver-1.6.11.M2.jarバージョンに置き換えます。すべてがスムーズに動作し始めました。

1

この問題は、JDK9のアーリーアクセスバージョンを実行することによっても発生する可能性があります。

Mavenは、JVMで新しいバージョンのJavaを好むかもしれません。PATHです。

私の場合は、Ubuntu 15.04でSwagger2でSpringを実行していて、java-8-oraclejava-9-oracle(さらにいくつかのバージョン)がインストールされています。私のjava -versionPATHから派生し、1.8.0_72と言っていますが、まだMavenを実行して/usr/bin/mvnecho JAVA_HOMEに変更すると、/usr/lib/jvm/java-9-oracleを選択したことを示しています。

JAVA_HOMEから/usr/lib/jvm/java-8-oracleにエクスポートすると、Mavenは希望のバージョンのJavaを使用し、Springの依存性注入配線のポイントカットのAOP製織に問題がなくなりました。

0

この問題は、プロジェクトがJava 1.6でコンパイルされたが、TomcatサーバーがJava 8で開始されたために発生しました。

0

@Beforeアドバイスで@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> 

関連する問題