方法参数aspectj无法正常工作

时间:2019-01-05 11:56:41

标签: java spring-boot aspectj

我创建了一个名称为Validation的注释,并在方法参数上注入了代码,并且在调用之前一直使用Aspect来验证我的对象。它不起作用

注释代码

page.button(root)

操作码

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

将注释用作@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() { } }

1 个答案:

答案 0 :(得分:1)

在任何带有参数@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. 匹配
  6. 如果您的论点不是唯一的,则可以在其他论点之间(未用@Validation注释)
  7. 您要查找的注释
  8. 注释的自变量类型
  9. 请参阅5。
  10. 组合表达式
  11. 使参数可用于您的方法
  12. 与5和8一样,它可能不是第一个参数
  13. 参数名,与方法签名(Object toVerify)中的相同

请注意,如果您使用的方法带有多个参数,其中一些参数带有注释,有些则没有注释,还有其他组合-不确定它将始终有效。