永发信息网

SpringMVC中配aop拦截不生效,咋回事

答案:3  悬赏:80  手机版
解决时间 2021-03-14 15:32
SpringMVC中配aop拦截不生效,咋回事
最佳答案
最近由于项目原因,在Spring+SpringMVC+Mybatis的环境中,增加对controller或是service的日志监控,在网上搜了半天,按照SpringAop的配置出不了结果,在按照网上的各种配置改……,各种头疼中,无意中看到摸个高手写的一段文字突然,感觉很有意思,就这样莫名其妙的解决了。回头看,我去,别人都写好了,我们配置都不会配置,悲哀…,这就是我对各种框架一知半解,甚至不知道的结果。
  首先对入口文件,web.xml分析:
  还有一点,我们可以查到,加载这连个配置文件的累分别是:spring(applicationContext),SpringMVC(webApplicationContext)(希望没记错,记错了自己对应修改)
  第一步,要明确,我们是在SpringMVC上aop监测,那么所有的报扫描注入都在SpringMVC的配置文件中完成,不要再spring的配置文件中完成,不然在开启代理后,发现还是没有起到任何作用。(当然,aopalliance-1.0.jar,aspectjweaver-1.8.6.jar这两个jar包不可缺少)
  第二步,在SpringMVC的配置文件中开启它的代理模式:<aop:aspectj-autoproxy expose-proxy="true"></aop:aspectj-autoproxy>
  第三步,进行aop监测相关方法的类的编写
  最后就是一个小技巧,就是先测pointcut表达式的具体到某一个具体函数,成功后,在用.*来代替,在测,知道成功完成为止!!!!!
  希望对大家有帮住,也希望有大牛深入剖析其中的原理。有看到的同学请给我转个链接,谢谢。
全部回答
首先我的aop切面类文件路径有问题,后来移到了logic下的util包中; 放在spring-mvc.xml中即可。 附上拦截controller的类: package com.ts.bg.logic.util; import javax.servlet.http.httpservletrequest; import org.aspectj.lang.proceedingjoinpoint; import org.aspectj.lang.annotation.around; import org.aspectj.lang.annotation.aspect; import org.springframework.stereotype.component; @component @aspect public class indexaoputil { //设置切入点,匹配所有controller的toindex方法 public static final string index_list_init="execution(* com.ts.bg.controller.*.toindex(..))"; @around(index_list_init) public object index_list_init(proceedingjoinpoint joinpoint) throws throwable{ object object =null; object[] args = joinpoint.getargs(); if(args!=null){ httpservletrequest request=(httpservletrequest) args[0]; object=joinpoint.proceed(); //设置菜单编号 request.setattribute("menucode", request.getparameter("menucode")); } return object; } } 该类的意义:拦截所有controller目录下的controller中的toindex方法。 网上有说controller类拦截不到,用其他方式,我试过了,不行。 可能和spring版本有关系,我的是spring4.x。
spring整合事物使用aop的,你可以参考一下 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.service.*.*(..))" /> </aop:config>
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新家园小区一号院(西门)在什么地方啊,我要过
氢气发生器没有流量,没有压力,怎么诊断
珠海哪有做陶、玩陶、学习陶艺的地方?
事业单位应届生为什么比往届生好找工作
须作了,还要这个花花有用吗
精庄金依祈美白透红第三代怎么样
帝中海洗浴中心地址在哪,我要去那里办事
笔记本光驱占不占内存cpu什么的?
上半身跟背后总是长痘痘 是什么原因?
单反相机中的套头指的是什么
益丰大药房澧县劳动路店这个地址在什么地方,
中国秘密储存数千架歼6歼7歼8战机是要干什么
买一只品种四十斤左右的波尔山羊得多少钱
华莱士怎么加盟的大概需要投资多少,不算房租
我注册了新浪邮箱是收费的,每月都是从手机扣
推荐资讯
在什么情况下需要给出自己的手机号码
和螃蟹有关的成语故事
涞水县其中口乡其中口村村怎么去啊,有知道地
光泽县司前乡人口和计划生育服务中心地址有知
银凯铝业这个地址在什么地方,我要处理点事
滕州私立中学和公办中学哪个好
我的西数硬盘2TB的,怎么没检测到有缓存
全民wifi怎么安装
2015年3月4日9点半出生的女孩性屈的起什么名
赵丽宏的《渔童》内容概括 【快呀!十万火急】
为什么出演巴拉拉小魔仙的只有刘美含出名
同源和老北京布鞋商水专卖店在哪里啊,我有事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?