繁体   English   中英

方法参数aspectj无法正常工作

[英]method parameter aspectj is not working spring boot

我已经创建了一个名称为Validation的注释,并在方法参数上进行了注入,并且在调用之前先使用方面来验证对象。 没用

注释代码

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Validation {}

Aop代码

@Aspect
@Component
public class ValidatorAOP {
    @Before("valditionAnnotation()")
    public void validate(final JoinPoint jp) throws Throwable {
        Validator object = (Validator) jp.getTarget();
        object.validator();
    }
    @Pointcut("@annotation(Validation)")
    public void valditionAnnotation() {
    }
}

将注释用作public TrackingId createNewOrder(@Validation Order newOrder)

在具有以@Validation注释的参数的任何方法之前调用此方法,我认为这是您想要的:

@Before("execution(* *(.., @Validation (*), ..)) && args(.., toVerify)")
public void validate(final JoinPoint joinPoint, final Object toVerify) {

}

如果您不希望使用参数值,则只需删除&& ...部分和方法参数。

@Before("execution(* *(.., @Validation (*), ..)) && args(.., toVerify)")
  |          |     | |  |     |         |   |    |   |    |      |
  1          2     3 4  5     6         7   8    9   10   11     12
  1. 连接点之前调用的建议
  2. 匹配方法执行连接点
  3. 方法可见性 ,匹配任何(公共,私有等)
  4. 方法名称 ,匹配任何
  5. 如果您的参数不是唯一的,则可以在其他参数之间(未使用@Validation注释)
  6. 您正在寻找的注释
  7. 注释参数类型
  8. 见5。
  9. 组合表达式
  10. 使参数对您的方法可用
  11. 像5和8一样,它可能不是第一个参数
  12. 参数的名称 ,与方法签名中的相同( Object toVerify

如果您的方法带有多个参数,请注意,有些带有注释,有些没有,以及其他组合,请务必小心-不确定它是否会一直有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM