@Aspect aop 重复执行

使用@Aspect记录操作日志
本文探讨了使用@Aspect注解记录后台管理员操作日志的实践,包括配置切面时遇到的未切到切面及方法重复执行等问题,以及相应的解决策略。

@Aspect使用中出现的一些问题: 

  因为最近系统需求想记录后台管理员的操作日志,比如点击了什么按钮,做过什么操作,传入了什么参数,返回了什么结果,统统想记录下来,所以需要截取controller层面的每个方法。 

所以我第一反应想到的就是面向切面。实现的方式也有很多种,在这里我使用的就是@Aspect注解。 
中间出现的问题记录一下。 
1.没有切到切面: 
@AfterReturning(pointcut="execution(* com.admin.controller..*.*(..)))", 
            returning="returnValue") 
    public void afterOp(JoinPoint point, Object returnValue){ 
        try { 
            xxx; 
            } 
        } catch (Exception e) { 
            logger.error("记录系统管理员操作日志异常:"+e); 
        } 
在配置完之后发现对应的controller层的方法执行完毕之后,并没有跳转到对应的方法中,经过一系列资料查阅后,解决方法如下: 
1.有可能execution表达式不正确,要注意包名,类名,方法名,入参的规则等等。 
2.注解没有开启<aop:aspectj-autoproxy proxy-target-class="true"/>,(网上看一些博客上说这个需要配置到springmvc的配置文件当中,在spring的配置文件中是没有效果的) 

2.方法重复执行: 
因为我切的是所有的controller的方法,所以当我去点击查询列表页面的时候进入了两次这个方法,后来去看,是因为controller层中使用了@InitBinder注解,主要是用来对页面数据进行解析绑定的,例如时间格式等。 
解决方法: 
加上targer的方法判断过滤掉。 

因为项目配置和使用的框架不同,可能遇到的问题也不相同,所以仅仅是作为参考 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值