Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
269 views
in Technique[技术] by (71.8m points)

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

问题描述

请问大家,最近做的项目中我想用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后置通知中的记录日志逻辑未生效;


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...