@AfterReturning(value = "execution(* org.springframework.data.repository.CrudRepository.save(..)) ", returning = "result")
public void repo(JoinPoint joinPoint, Object result) {
// ...
}
此切入点涵盖了所有保存或更新操作,而与传递的参数或返回类型无关,但是我只想在参数或返回类型中排除xyz.class。那怎么可能?我不能提及所有保存操作,因为总共有50多个模型,但是我只希望涵盖其中的48个。
您声明包含和排除的方法签名,并像这样组合它们
@Pointcut("execution(* org.springframework.data.repository.CrudRepository.save(..))")
public void any() {
}
@Pointcut("execution(* org.springframework.data.repository.CrudRepository.save(MyClass1))" +
" || execution(* org.springframework.data.repository.CrudRepository.save(MyClass2))")
public void excluded() {
}
@AfterReturning(value = "any() && !excluded()", returning = "result")
public void repo(JoinPoint joinPoint, Object result) {
// ...
}
[牢记erasure of a type,您可以做的最简单的事情就是,如果arg类型为XYZ,则不做任何事情就从方法返回。
@Pointcut("execution(* org.springframework.data.repository.CrudRepository+.save(..))")
public void savePointCut() {
// savePointCut
}
@AfterReturning(value = "savePointCut()", returning = "result")
public void afterReturning(JoinPoint joinPoint, Object result) {
if (joinPoint.getArgs()[0] instanceof XYZ) return;
logger.info("AfterReturning :[{}]", joinPoint.getArgs());
}