springMVC中aop配置不起作用解决方法

     最近两天在学习spring的aop原理后,想在springMVC里练习一下,按照网上的配置写好了相应的aop类以及在xml做了相应设置。但是aop的设置一直不起作用。查看相关博客后找到了一种解决方法。
     在我的web环境中spring的ApplicationContext.xml的配置大致为:web容器启动时,扫描除controller之外的service,dao等其他的所有包。

<context:property-placeholder location="classpath:mybatis/db.properties"/>
<context:component-scan base-package="com.zkw">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

在springMVC的springMVC.xml的配置是:只扫描controller包。

<!-- 扫描controller包 -->
<context:component-scan base-package="com.zkw.controller" />

然后我想给一个controller类中的一个方法添加aop。具体为当在执行这个方法前执行一个函数,方法执行完毕后再执行另一个函数。所以先开始我是在ApplicationContext.xml文件中加入了如下配置:

<!-- aop相关 -->
<bean id="timetest" class="com.zkw.aop.monitor.TimeTest" />
    <aop:config>
        <aop:aspect id="timee" ref="timetest">
            <aop:pointcut id="analysis_test" expression="execution(* com.zkw.controller.framework.analysis.analysisController.weiboAnalysis(..))"/>
            <aop:before method="beforeAdvice" pointcut-ref="analysis_test" />
            <aop:after method="afterAdvice" pointcut-ref="analysis_test" />
        </aop:aspect>
    </aop:config>

增强类com.zkw.aop.monitor.TimeTest的代码如下:

public class TimeTest {
    public void beforeAdvice() {
        System.out.println("增强开始前");
    }

    public void afterAdvice() {
        System.out.println("增强结束后");
    }

}

就是在方法执行前打印一句话,方法完成后再打印一句话。而切点函数为weiboAnalysis(),也只是打印了一句话。
但是在我运行代码,从前台访问weiboAnalysis()函数的时候,并没有打印出织入的增强。后来参考http://blog.csdn.net/tianjun2012/article/details/47809739 博客后,将aop的配置放入了springMVC.xml中,就能正常完成增强的织入了。
后来我将ApplicationContext.xml的aop配置改了一下,切点改成了
<aop:pointcut id="analysis_test" expression="execution(* com.zkw.service.framework.analysis.TestService.*(..))"/> 即将切点设置成了ApplicationContext.xml文件扫描的service包中的一个方法,然后运行之后发现同样可以织入增强。
     总结:对需要织入增强的类或函数进行aop配置时,相应的aop配置需要写在那个扫描该类的配置文件中。对于本例来说,在ApplicationContext.xml中完成了除controller之外的service,dao等的配置,所以在ApplicationContext.xml文件中写入对controller的aop配置就不会起作用,相反springMVC.xml只完成了controller的配置,所以在springMVC.xml中写入对service的配置就不会起作用。 至于原因,暂时还没有搞清楚。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值