今天晚上一直在学习这个AOP,测试过程中我 相信大家和我一样 都会出各种各样的
问
题,其中出现与
本标题的一样效果的人士 ,可能会很多。本人用了一个小时在网上查
这
个AOP注解无效 的问题,有很多各样的答案,有讲配置代码的,也有讲SpringAOP的
执
行原理过程的。
各种解决问题的方法看到我花到多,很多都不能符合我的问题所在。当然咯,
他们
能分析结果出来写在博客上,
说明他们还是总结出他们自
己的本身在编程当中遇到的一
些
麻烦所总结出来的经验。因
此,我觉得找原因时,第一,可以先看与原理相关的文
章。第二,由于本人的不一定是适合自己,所以知道原理后一步步地查。第三,如果有
条件 的话,下载一些案例下来,看看别人是怎么写的,对照着代码 ,因为步骤这些是
区别不大的有时,我最后发现我的applicationContext.xml 中<!-- 开启AOP注解扫描 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<aop:aspectj-autoproxy proxy-target-class="true"/>
是没问题,当我改为这样时
aop<!-- declare AOP-->
<bean id="operateLogger" class="org.tarena.aspect.OperateLogger"/><!--
configure AOP acting on Object(Controller)
--><aop:config>
<aop:aspect ref="operateLogger"><!--
aop前置通知
--><aop:before method="log1" pointcut="within(org.tarena.controller..*)" />
</aop:aspect>
<aop:aspect ref="operateLogger"><!--
aop前置通知
--><aop:around method="log2" pointcut="within(org.tarena.controller..*)" />
</aop:aspect>
<aop:aspect ref="operateLogger"><!--
aop前置通知
--><aop:after-throwing method="log3" throwing="e" pointcut="within(org.tarena.controller..*)" />
</aop:aspect>
</aop:config><!--
以 上方法太过麻烦,建议使用如下:
--><!-- 开启AOP注解扫描, -->
就是不采用AOP自动注解扫描时,就可以,但是效率太低。最后发现
之前 的配置是 <context:component-scan base-package="com.tarena.controller" />
如果 是这样的话,自动扫描就困在这个控制层边,我们要把这个自动扫描的功能不仅仅是controller的话,就应该扩大范围,这样我们的DAO,持久层,组件,服务层,控制层,AOP都能被自动的加载。
如果 SpringMVC中使用aop注解无效出现在你身上时,不访check一下AOP注解扫描有没有在你自动扫描注解的范围内,还是那句话,大牛请让道,小生还是菜鸟级别的人物希望能帮到初学者哦
还是那句话,世界这么大,希望能与你们同在,这样才能缩小大家的距离。