关闭

配置了 Spring AOP 但会调用两次的问题解决方法

标签: springaop
687人阅读 评论(0) 收藏 举报
分类:

1 发现问题

项目配置了 Spring AOP,但会被调用两次:

开始
before()
[2017-07-26 11:10:18.071] [INFO]:[com.deniro.jail.service.sys.SysLogAspect][log] [com.deniro.jail.service.sys.SysLogAspect.log(SysLogAspect.java:43)] [调用方法:void com.deniro.jail.service.biz.DictItemService.save(DictItem);输入参数:[com.deniro.jail.domain.biz.DictItem@4f55a864[dictItemId=<null>,dictItemType=health,dictItemDescription=1,dictItemValue=1,dictItemIsOptional=true,createTime=2017-07-26 11:10:18.056,modifyTime=2017-07-26 11:10:18.056]]] 
开始
before()
Hibernate: insert into ...
结束
[2017-07-26 11:10:18.141] [INFO]:[com.deniro.jail.service.sys.SysLogAspect][log] [com.deniro.jail.service.sys.SysLogAspect.log(SysLogAspect.java:58)] [输出参数:null;耗时:0:00:00.062] 
结束

2 分析问题

切面定义如下:

@Component
@Aspect
public class SysLogAspect {

    static Logger logger = LoggerFactory.getLogger(SysLogAspect.class);

    @Pointcut("@annotation(com.deniro.jail.domain.sys.SysLog)")
    private void sysLog() {
    }

    /**
     * 记录日志
     *
     * @param pjp
     */
    @Around("sysLog()")
    public Object log(ProceedingJoinPoint pjp) {

        logger.info("调用方法:{};输入参数:{}", pjp.getSignature()
                , pjp
                .getArgs());

        StopWatch sw = new StopWatch();
        sw.start();
        Object o = null;
        try {
            System.out.println("开始");
            o = pjp.proceed();
            System.out.println("结束");
        } catch (Throwable throwable) {
            logger.error("记录日志", throwable);
        }
        sw.stop();
        logger.info("输出参数:{};耗时:{}", o, sw.toString());
        return o;


    }
}

切点用的是注解配置方式,查了一下,只在一个地方定义了这个注解:

@RequestMapping(value = "/save")
@ResponseBody
@SysLog(description = " 保存【字典项】")
public AjaxResponse save(DictItem dictItem) {
    try {
        dictitemService.save(dictItem);
        return AjaxResponse.success();
    } catch (Exception e) {
        return AjaxResponse.fail();
    }
}

怀疑是重复定义的问题,我们找找看。

打开 spring 的 MVC 配置文件:

<!-- 开启对 @Aspect 的支持-->
<aop:aspectj-autoproxy/>

这是第一处定义的地方,如果类配置了 @Aspect,那么这个类会被自动扫描到 spring 框架中。

第二处定义的地方在 spring 框架配置文件:

<!-- 系统日志切面-->
<bean class="com.deniro.jail.service.sys.SysLogAspect"/>

难怪被执行了两次呢O(∩_∩)O~

3 解决问题

删除 spring 框架配置文件中定义的切面 bean,好了,现在一切恢复正常咯O(∩_∩)O~

记住:开启了 @Aspect 配置,而且切面类加了 @Aspect 注解,这时就不需要再对切面类进行配置 XML 配置哦。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人钱柜娱乐开户,不代表CSDN网站的钱柜娱乐开户或立场

spring aop 执行两次

系统整合了shiro框架后,发现方法本体执行一次,aop执行两次! 经过研究,是因为系统中有两个代理创建器,生成两个代理类导致的。
  • wangjun5159
  • wangjun5159
  • 2016-07-04 22:14
  • 3853

spring多个AOP执行先后顺序(面试问题:怎么控制多个aop的执行循序)

众所周知,spring声明式事务是基于AOP实现的,那么,如果我们在同一个方法自定义多个AOP,我们如何指定他们的执行顺序呢?网上很多答案都是指定order,order越小越是最先执行,这种也不能算是...
  • hxpjava1
  • hxpjava1
  • 2017-02-17 09:36
  • 3771

Spring AOP代理机制以及方法调用在同一个类的另一个方法的问题

ref:http://my.oschina.net/mushui/blog/161387 Spring AOP使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议优先使用JDK的动态代理...
  • booooooooooooooooooo
  • booooooooooooooooooo
  • 2014-01-23 00:49
  • 1309

jquery easyui datagrid请求两次或多次的问题解决方法

jquery easyui datagrid请求两次或多次的问题解决方法
  • liaoyin_1221
  • liaoyin_1221
  • 2016-04-01 15:45
  • 8780

配置Qt使用VS2010进行开发安装以及问题解决方法

  • 2015-06-02 23:58
  • 431KB
  • 下载

JSP、AJax中文乱码问题解决,escape(), encodeURI(), encodeURIComponent(),js对参数连续两次调用 encodeURI(String) 方法

ajax检证用户就否存在和解决乱码问题! 原文:http://user.qzone.qq.com/278887848/blog/11 写了一个ajax,在...
  • sunboyzsm
  • sunboyzsm
  • 2011-08-20 14:50
  • 748

jersey和spring集成,不能注入service的问题解决方法

package cn.mykoo.ws.resources; import java.io.File; import java.io.FileInputStream; import ja...
  • h1987983372
  • h1987983372
  • 2011-11-26 21:18
  • 5240

pcl1.8.0 vs2013 win10 x64 安装配置及部分问题解决方法

win10 x64下visual studio 2013 的 PCL 安装及配置过程,过程中可能出现的小问题解决方法
  • u012750702
  • u012750702
  • 2016-11-05 18:00
  • 4753

mysql免安装配置教程及遇到1067服务启动不成功的问题解决方法

mysql免安装配置简洁教程及遇到问题的解决方法
  • Yonk_Z
  • Yonk_Z
  • 2016-05-31 17:50
  • 3116

linux下NTP服务器配置及问题解决方法

Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服务。NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客户...
  • cdjsjyf
  • cdjsjyf
  • 2013-08-13 09:36
  • 3294
    个人资料
    • 访问:84618次
    • 积分:2493
    • 等级:
    • 排名:第16663名
    • 原创:167篇
    • 转载:0篇
    • 译文:0篇
    • 评论:35条
    钱柜娱乐开户
    文章分类