4

私はアスペクトが初めてで、関数をアスペクトで囲もうとしていますが、それを呼び出すことができません。

メソッドのシグネチャは次のとおりです。

public <T> T get(String uri, List<BasicNameValuePair> nameValuePairs, final Class<T> clazz)

そして、それは完全修飾名を持つクラスで定義されています:

com.X.Y.infrastructure.rest.RestClient

そしてアスペクト

@Aspect
public class WebRequestTimeLoggerAspect {
   @Around("execution(* com.X.Y.infrastructure.rest.RestClient.get(..))")
   public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
    System.out.println("hijacked method : " + joinPoint.getSignature().getName());
    System.out.println("hijacked arguments : " + Arrays.toString(joinPoint.getArgs()));
    System.out.println("Around before is running!");
    Object ret = joinPoint.proceed(); 
    System.out.println("Around after is running!"); 
        return ret;
   }
}

問題が見つからないようです。すべてが宣言され、Spring が両方の Bean をコンテナーにロードします。

もし可能なら。同じ実行減速に別の機能を追加するにはどうすればよいですか?

ありがとう。

アップデート:

Aspectj (Eclipse) をサポートするようにプロジェクト構成を変更する必要があったようですが、次のエラーが発生しています。

applying to join point that doesn't return void: method-execution(java.lang.Object com.X.Y.infrastructure.rest.RestClient.get(java.lang.String, java.util.List, java.lang.Class))

戻り引数を指定する必要があると仮定します。* ですべてキャッチされると思ったのですが、それは void のようです。

では、ポイント カットはそのようなジェネリックに対してどのように見えるべきでしょうか?

再度、感謝します

別のアップデート

コメントに続いて、メソッドに戻り値を追加しました。しかし、アスペクトはまだ発火していません。

リクエストにより、スプリング構成:

<aop:aspectj-autoproxy />
<bean id="webRequestTimeLoggerAspect" class="com.X.Y.infrastructure.rest.WebRequestTimeLoggerAspect" />

実際、パッケージスキャンがあるため、その側面の Bean を宣言する必要はないと思います。しかし、念のため。

4

0 に答える 0