0

spring mvc プロジェクトでカスタム注釈を作成しました。注釈は AOP を実行するために使用されます

@Around("execution(@Cached * * (..)) && @annotation(cache)")

ここで作成した注釈は「キャッシュ」です。注釈を含むメソッドはすべて、応答を値として、メソッド引数をキーとしてソファ ベースにキャッシュされます。

問題は、コントローラーでの注釈の動作 (AOP の動作) です。ただし、コントローラーから、さまざまな呼び出し可能なクラスとユーティリティを呼び出しています。呼び出し可能なクラスまたはユーティリティ関数に注釈「@Cached」を追加すると、AOP が機能しません。

XML ファイルでは、次のように宣言しています。

<aop:aspectj-autoproxy/>
<context:spring-configured/>
<context:component-scan base-package="com.abc.xyz">
    <!--<context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>-->
</context:component-scan>


<bean id="universalController" class="com.abc.xyz.misc.UniversalController"/>
<bean class="com.abc.xyz.api.metric.SystemTiming"/>
<bean class="com.abc.xyz.api.annotations.URLCacheImpl"/>
4

1 に答える 1

2

Spring AOP では、ポイントカット (この特定のケースでは @Cached アノテーションを配置した場所) に一致するクラスは Spring Bean である必要があります。したがって、私ができる最善の推測は、ユーティリティ クラスが Spring Bean ではない可能性が非常に高いということです。それが、それらが織り込まれていない理由です。考えられる 2 つのオプションがあります。

  1. ユーティリティ クラスも Spring Bean をきれいにする
  2. Aspectj の完全なサポートを使用します。これにより、ユーティリティ クラスが Spring Bean でなくても、アドバイスが織り込まれます。
于 2013-09-02T01:17:53.913 に答える