问答

Spring使用@Aspect遇到@After后置通知未生效的问题

作者:admin 2021-07-04 我要评论

问题描述 请问大家,最近做的项目中我想用aop做操作日志的记录,但其中引入jar包的配置文件中配置了aop:aspectj-autoproxy proxy-target-class="true" /强制使用...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

问题描述

请问大家,最近做的项目中我想用aop做操作日志的记录,但其中引入jar包的配置文件中配置了<aop:aspectj-autoproxy proxy-target-class="true" />强制使用cglib代理,现在我想对项目中某些接口(来源于引入jar包)实现类利用aop切面记录操作日志,但试了好几种方式都没成功,检查的切面表达式是没有问题的;目前我想到的方法是在接口实现类的业务逻辑后加上记录操作日志的逻辑,但这种方式主业务逻辑和日志处理逻辑代码就会耦合在一起,有没有哪位大佬可以帮忙指点一下?

问题出现的环境背景及自己尝试过哪些方法

尝试过的方法:
1.我试过在接口实现类配置@EnableAspectJAutoProxy(proxyTargetClass=false)这种形式,但@After后置通知并不能生效,
2.试过在项目xml配置文件中添加配置<aop:aspectj-autoproxy>使其不强制使用cglib代理;

相关代码

@After("execution(* com.nankang.gis.apps.fdcxmjc.functions.upload.after.AfterUploadFunctionPresale.afterUpload(..))")

public void after(JoinPoint joinPoint){
    //获取登录用户
    String userName = currentUserService.getCurrentUser().getUsername();
    if(userName == null){//没有管理员登录
        return;
    }
    //获取方法名
    String methodName = joinPoint.getSignature().getName();
    logger.info("get methodName:"+methodName);
    //创建日志对象
    DataImportLogVO log = new DataImportLogVO();
    log.setIMPORTID(new Random().nextInt(1000));
    log.setIMPORTTYPE(6);
    log.setIMPORTSUBTYPE(2);
    log.setIMPORTDATE(new Date());
    log.setIMPORTUSERNAME(currentUserService.getCurrentUser().getUsername());
    log.setIMPORTNAME("批预售");
    log.setRESULT(1);
    //添加日志
    logService.log(log);
}

你期待的结果是什么?实际看到的错误信息又是什么?

期待可以出现日志记录,但@After后置通知中的记录日志逻辑未生效;

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP的use 的 前提是包中的文件需要提前

    PHP的use 的 前提是包中的文件需要提前

  • 为什么分布式项目中需要分布式锁,而普

    为什么分布式项目中需要分布式锁,而普

  • mysql高效查询评论及回复内容,并且分

    mysql高效查询评论及回复内容,并且分

  • tp5 数据库查询  如何进行多对多查询

    tp5 数据库查询 如何进行多对多查询

腾讯云代理商
海外云服务器