1

例外をログに記録するために、アプリケーションの 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 メソッドが呼び出される理由を理解できませんか?

このような問題に詳しい方教えてください!

よろしく、ラフル

4

1 に答える 1

1

両方のタグに同じidものが割り当てられています。タグも同様ですaop:aspectaop:pointcut

一意の ID を割り当ててみてください。

于 2016-03-15T01:17:38.180 に答える