Spring AOP неожиданно вызывается

Я настроил 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?

Пожалуйста, дайте мне знать, если кто-то знает о такой проблеме!

С уважением, Рахул


person Rahul    schedule 14.03.2016    source источник
comment
aop:aspect id и aop:pointcut id используют одинаковые идентификаторы. Сомневаюсь, что проблема может быть в этом. Вы можете попробовать с уникальными идентификаторами.   -  person Madhusudana Reddy Sunnapu    schedule 14.03.2016
comment
@MadhusudanaReddySunnapu - я заметил тот же идентификатор aop: аспект и попытался изменить его, но не сработало. Я пропустил идентификатор aop:pointcut, который также совпадает, проблема решена после его изменения. Спасибо, что указали!!   -  person Rahul    schedule 15.03.2016


Ответы (1)


Один и тот же id назначается обоим тегам aop:aspect. То же самое и с тегами aop:pointcut.

Попробуйте присвоить уникальные идентификаторы.

person Madhusudana Reddy Sunnapu    schedule 15.03.2016