例外をログに記録するために、アプリケーションの 2 つの異なるパッケージに対して Spring AOP を構成しました。各パッケージには 2 つの異なる構成があります。
<aop:config>
<aop:aspect id="aspectLoggging" ref="abcExceptionAspect">
<aop:pointcut id="pointCut"
expression="execution(* com.abc.*.*(..))" />
<aop:before method="logBefore" pointcut-ref="pointCut" />
<aop:after-throwing method="logExceptionABC"
throwing="error" pointcut-ref="pointCut" />
<aop:after method="logAfter" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
<aop:config>
<aop:aspect id="aspectLoggging" ref="xyzlogAspect">
<aop:pointcut id="pointCut"
expression="execution(* com.xyz.*.*(..))" />
<aop:before method="logBefore" pointcut-ref="pointCut" />
<aop:after method="logAfter" pointcut-ref="pointCut" />
<aop:after-throwing method="logExceptionXYZ"
throwing="error" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
サービス メソッド呼び出しでは、これらの各パッケージに属するクラスのメソッドへの呼び出しがあります。
public void メソッド() {
method1(); -> パッケージ abc
method2(); -> パッケージ xyz
}
method2 で例外が発生し、logExceptionXYZ メソッドを呼び出します。ここで、それを一般的な例外 (ExceptionXYZ など) でラップし、さらにスローします。
しかし、この後、logExceptionABC メソッドも呼び出され、ExceptionABC などの一般的な例外がスローされます。
logExceptionABC メソッドが呼び出される理由を理解できませんか?
このような問題に詳しい方教えてください!
よろしく、ラフル