首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

spring AOP 之阻截范围

2013-10-29 
spring AOP 之拦截范围?示例代码如下:??package com.test.commonpublic interface BaseService{public vo

spring AOP 之拦截范围

?

示例代码如下:

?

?

package com.test.common;public interface BaseService{public void methodA();}package com.test.user.service;public interface UserService extends BaseService{public void methodB();}package com.test.user.service.impl;public class UserServiceImpl implements UserService{public void methodA(){//do something...}public void methodB(){//do something...}}

?

?

?

Spring 事务配置如下:

<aop:config>

<aop:pointcut id="servicePointcut" expression="execution(* com.test.user.service..*(..))"/>

?

<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>

</aop:config>

?

经过以上配置后,以为速个UserServiceImpl都在spring的事务管理范围内了,但当去调用UserServiceImpl.methodA方法时,发现methodA方法根本没有事务(断点后发现根本没有Spring的TransactionIntercepor的相关拦截)。造成这个问题的原因是因为spring默认情况下代理使用的时候JDK动态代理(必须要实现接口),这时候是代码接口上的方法而不是具体实现类上的方法,我的切入点声明的时候声明了只拦截 com.test.user.service包下所有类的所有方法,而methodA的方法是在另一个包下的,所以methodA的调用无法拦截到,解决办法就是把com.test.common包下的接口也声明到事务拦截范围内。

?

<aop:config>

<aop:pointcut id="servicePointcutC" expression="execution(* com.test.common..*(..))"/>

<aop:pointcut id="servicePointcut" expression="execution(* com.test.user.service..*(..))"/>

?

<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcutC"/>

<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>

</aop:config>

?

热点排行