1

@Controller クラスの関数に 2 つの側面を定義しました。

1 つは @Cacheble (Spring AOP を使用する Ehcache Spring アノテーション) です。

もう 1 つは、実行時間を計算する around アドバイスです。これは AspectJ のコンパイル時のアスペクトです。

メソッドが初めて呼び出されたとき、両方のアスペクトが実行されています。ただし、後続のすべての呼び出しでは、@Cacheble の側面のみがインターセプトされます。別のアドバイス (実行時間を計算する) は傍受されていません。これが傍受されないのはなぜですか?両方の側面に @Order を設定しましたが、それは役に立ちません。

実行時間を計算する2番目の側面は次のとおりです

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Order(value = 0)
public @interface MonitorPerformance {   
}

Dispathcher-servlet.xml には
<ehcache:annotation-driven create-missing-caches="true" cache-manager="ehCacheManager" order="1"/> 、あなたの提案を楽しみにしています。

ありがとう。

4

2 に答える 2

0

これがSpringAOPを使用したコンパイル時のAspectJである場合は、キャッシュされた結果に対してコンパイルされたアスペクトを実行しません。コンパイルされたクラスのバイトコードは、メソッドの周囲に直接挿入されます。メソッドを呼び出さずにこれがプロキシされて返される場合(これはキャッシュ可能です)、当然、後者の側面は呼び出されません。

于 2012-06-22T09:03:02.577 に答える
0

アスペクトを実行するには、コンテナから取得したインスタンスでメソッドを呼び出す必要があります。そうですか?

于 2012-05-23T21:06:55.840 に答える