Spring AOP 可能的通用 return 类型
Generic return type possible with Spring AOP
我尝试使用像
这样的通用注释来创建方面
@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 注释用于人员、用户等不同类型的实体。所以 return 值可以是通用的。
您似乎正在尝试为 return 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
为 [=19 的切入点=]ed.
我尝试使用像
这样的通用注释来创建方面@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 注释用于人员、用户等不同类型的实体。所以 return 值可以是通用的。
您似乎正在尝试为 return 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
为 [=19 的切入点=]ed.