Проблема с AOP / AspectJ не выполняется по критерию - PullRequest
0 голосов
/ 20 ноября 2018

Кто-нибудь знает, почему следующий AOP / AspectJ не работает в Примерах 2,3 ?

Примечание: Пример 1 работает .

Моя цель - перехватить запуск Hibernate Query 'executeUpdate(), который происходит во всем приложении. Hibernate Query - это интерфейс, и я вижу в коде, что класс реализации, который я получаю, это QueryImpl . Так что это класс, на который я хочу ориентироваться, хотя я тоже пробовал универсальные фильтры.

XML

<aop:config>
    <aop:aspect id="myAspect" ref="aspectBean">

       <!-- EXAMPLE 1: SIMPLE TEST: WORKS OK. 
            I intercept all methods in all my custom classes in "dao" package. -->
        <aop:pointcut id="test1" expression="execution(* myapp.dao.*.*(..))" /> 
        <aop:before pointcut-ref="test1" method="doTest1" /> 

       <!-- EXAMPLE 2: DOESN'T WORK.
            Target everything in Hibernate's Impl package with executeUpdate() function -->         
        <aop:pointcut id="executeUpdate2" expression="execution(* org.hibernate.impl..*..executeUpdate(..))" />
        <aop:before pointcut-ref="executeUpdate2" method="handleExecuteUpdate" /> 

        <!-- EXAMPLE 3: DOESN'T WORK.
            Target QueryImpl specifically -->   
        <aop:pointcut id="executeUpdate3" expression="execution(* org.hibernate.impl.QueryImpl.executeUpdate(..))" /> 
        <aop:before pointcut-ref="executeUpdate3" method="handleExecuteUpdate" /> 

    </aop:aspect>
</aop:config>
<bean id="aspectBean" class="myapp.util.AOPAspect">
</bean>

Я точно знаю, что иерархия Hibernate верна. Пример № 1 прекрасно работает, поэтому я знаю, что AOP / AspectJ подключен правильно. Есть ли что-то в обходе внешней библиотеки, которая не поддерживает AOP / AspectJ?

1 Ответ

0 голосов
/ 21 ноября 2018

Я обнаружил, что это не работает, потому что я имею дело с внешним JAR (в данном случае Hibernate). Пример 1 работает, потому что я в своем собственном коде.

Нет простых решений для внешних точек JAR, возможно только ткачество времени загрузки (но я не пробовал),

Aspectj: метод перехвата из внешней банки

...