22

spring mvc ベースのアプリケーションでアクティビティをログに記録するために Aspect を使用しています。@controllerアノテーションを使用して、アプリケーション内のコントローラーを定義しています。私は2つの異なるパッケージに2つの異なるコントローラーを持っています

  • com.package1 にはコントローラー 1 クラスが含まれています。名前を AController にしましょう。
  • com.package2 にはコントローラー 2 クラスが含まれています。名前を BController としましょう。

を使用して、コントローラーの特定のパッケージにアスペクトを適用できます

<aop:config>
    <aop:pointcut id="pointcut1"
        expression="execution(* package1.*.*(..))"
        id="policy1" />
    <aop:aspect ref="aspect1" order="1">
        <aop:before pointcut-ref="pointcut1" method="before" arg-names="joinPoint" />
        <aop:after-returning returning="returnValue" arg-names="joinPoint, returnValue" pointcut-ref="pointcut1" method="after"  />
    </aop:aspect>
</aop:config>


<bean id="aspect1" class="com......aspectclass" />

私の質問は、 expression(* package1. . . (..))**で複数の異なるパッケージを指定する方法です。

現在、パッケージごとに 1 つの個別のポイントカットを宣言しており、側面では、各ポイントカットに対して 1 つの個別aop:beforeaop:afterエントリを宣言しています。しかし、これは複数のパッケージのポイントカットを定義する理想的な方法だと思います。

4

4 に答える 4

58

ブール演算子を使用できます。

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))"
于 2011-12-08T07:46:34.953 に答える
16

アノテーションを使用する場合

@Pointcut("within(com.package1..*) || within(com.package2..*)")
于 2015-12-17T08:57:19.853 に答える