我尝试使用通用注释创建Aspect

@Aspect
@Component
public class CommonAspect<T extends CommonEntity>{


    @AfterReturning(value = "@annotation(audit)",returning="retVal")
    public void save(JoinPoint jp,T retVal, Audit audit) {

        Audit audit = new Audit();
        audit.setMessage(retVal.getAuditMessage());
        //other code to store audit

    }


}


这可能吗 ?就我而言,它失败了。
我想对个人,用户等不同类型的实体使用此@Audit注释。因此返回值可以是通用的。

最佳答案

似乎您正在尝试为返回CommonEntity的方法定义一个方面。
在这种情况下,您无需使用泛型,只需删除泛型声明并稍微调整方面声明即可:

@Aspect
@Component
public class CommonAspect {


    @AfterReturning(value = "@annotation(audit) && execution(CommonEntity *(..))",returning="retVal")
    public void save(JoinPoint jp, CommonEntity retVal, Audit audit) {

        Audit auditInfo = new Audit();
        auditInfo.setMessage(retVal.getAuditMessage());
        //other code to store audit

    }


}


我要做的是替换参数列表中的T并将execution(CommonEntity *(..))添加到切入点表达式中,以将匹配项限制为返回CommonEntity的切入点。

10-08 01:23