检查 Spring 切入点表达式中的注释值

Check annotation value in Spring Pointcut Expression

我正在尝试添加仅适用于 'non- readonly transactions' 的方面,而不适用于 @Transactional(readonly=true)

下面的代码适用于上面有 @Transactional 注释的所有方法。

@AfterReturning("@annotation(org.springframework.transaction.annotation.Transactional)")
public void afterTransaction() {...}

还有一个替代方案,即从 JoinPoint 获取信息,但这很麻烦,我不想走那条路。

文档似乎对此不是很具体。

您可以使用 execution 切入点来限制注释匹配到注释具有特定参数值的连接点。

简单的注解值匹配

@AfterReturning("execution(@org.springframework.transaction.annotation.Transactional(readOnly=true) * *(..))")
public void process(JoinPoint joinPoint) {
  System.out.println(joinPoint);
}

注解值匹配+注解参数绑定

@AfterReturning("execution(@org.springframework.transaction.annotation.Transactional(readOnly=true) * *(..)) && @annotation(transactional)")
public void process(JoinPoint joinPoint, Transactional transactional) {
  System.out.println(joinPoint + " -> " + transactional);
}