web-dev-qa-db-ja.com

複数のパッケージに単一のポイントカットを指定する方法

SpringMVCベースのアプリケーションでアクティビティをログに記録するために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:beforeおよびaop:after各ポイントカットのエントリ。しかし、これは複数のパッケージのポイントカットを定義するための理想的な方法だと思います。

13
Ketan

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

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))"
47

使用する場合注釈

@Pointcut("within(com.package1..*) || within(com.package2..*)")
11
Rohan Kushwaha

春のブーツで

@Before("execution(* PackageName.Controller.Service.MethodName(..))          
  ||execution(* PackageName.Controller.Service.*.*(..))")

Spring-projects/AOP

2
Dapper Dan