Проблема с AOP/AspectJ, не выполняющимся по критерию

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

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

Моя цель — перехватить запуск Hibernate Query's 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?


person gene b.    schedule 20.11.2018    source источник


Ответы (1)


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

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

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

person gene b.    schedule 21.11.2018
comment
Хорошо, что вы нашли корень своей проблемы. Кроме того, использовать LTW это просто. - person kriegaex; 11.12.2018