Spring2中aop的使用及遇到的一些有关问题
Spring2中aop的使用及遇到的一些问题
aop在spring中有两中实现的方式一种是xml,一种是基于注解的,我主要通过xml方式来实现 首先是要引入相关的jar包,如aspectjrt.jar,aspectjweaver.jar <bean id="aaa" class="aaa"></bean> <aop:config> <aop:aspect ref="aaa"> <aop:pointcut id="login" expression="execution(* bbbbbb*.checkLogin*(..))"/> <aop:after-returning method="loginLog" pointcut-ref="login"/> </aop:aspect> </aop:config> execution(* bbbbbb*.checkLogin*(..) * 返回类型 bbbbbb* 包路径 checkLogin* 方法名 .. 参数 method="loginLog" aaa中调用方法 pointcut-ref="login" target方法 execution(* *(..)) and !execution(* *(..)) 包含并且不包含指定路径中方法 aop:after-returning 方法之后调用 aop:around 方法前后 aop:before 调用之前 aop:throw 异常之后 在拦截方法时,原方法如果有异常抛出,要捕捉业务异常,并继续抛出 注意在指定包中存在的方法重名的现象 在websphere环境中,加入aop之后,带来了循环依赖的问题,因为在原有的程序中,存在着循环依赖的情况, 在没有加入aop之后,没有显现,加入之后,则出现 has been injected into other beans xxxxx in its raw version as part of a circular reference, but has eventually been wrapped (for example as part of auto-proxy creation). This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example 最终去掉了引用,建立新的第三方对象,解决这个问题.