Я настроил 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>
В вызове метода службы есть вызовы методов классов, принадлежащих каждому из этих пакетов:
публичный недействительный метод () {
метод1(); -> пакет абв
метод2(); -> пакет xyz
}
Некоторое исключение возникает в методе2, который вызывает метод logExceptionXYZ, где мы оборачиваем его в общее исключение, скажем, ExceptionXYZ, и выбрасываем его дальше.
Но каким-то образом после этого метод logExceptionABC также вызывается и генерирует общее исключение, скажем, ExceptionABC.
Я не могу понять, почему вызывается метод logExceptionABC?
Пожалуйста, дайте мне знать, если кто-то знает о такой проблеме!
С уважением, Рахул
aop:aspect id
иaop:pointcut id
используют одинаковые идентификаторы. Сомневаюсь, что проблема может быть в этом. Вы можете попробовать с уникальными идентификаторами. - person Madhusudana Reddy Sunnapu   schedule 14.03.2016