AOP/AspectJ 未按标准执行的问题
Problem with AOP/AspectJ not executing on criterion
有谁知道为什么以下 AOP/AspectJ 在示例 2,3 中不起作用?
注意:示例 1 有效。
我的目标是拦截 Hibernate 的触发 Query's executeUpdate()
, which occurs throughout the application. Hibernate Query is an interface, and I see in the code that the implementing class I get back is QueryImpl。这就是我想要定位的 class,尽管我也尝试过通用过滤器。
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的外部库遍历?
我发现它不起作用,因为我正在处理外部 JAR(在本例中为 Hibernate)。示例 1 有效,因为我在自己的代码中。
外部 JAR 切入点没有简单的解决方案,只有加载时编织是可能的(但我还没有尝试过),
Aspectj: intercept method from external jar
有谁知道为什么以下 AOP/AspectJ 在示例 2,3 中不起作用?
注意:示例 1 有效。
我的目标是拦截 Hibernate 的触发 Query's executeUpdate()
, which occurs throughout the application. Hibernate Query is an interface, and I see in the code that the implementing class I get back is QueryImpl。这就是我想要定位的 class,尽管我也尝试过通用过滤器。
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的外部库遍历?
我发现它不起作用,因为我正在处理外部 JAR(在本例中为 Hibernate)。示例 1 有效,因为我在自己的代码中。
外部 JAR 切入点没有简单的解决方案,只有加载时编织是可能的(但我还没有尝试过),
Aspectj: intercept method from external jar