自定义注释仅适用于ElementType.METHOD

时间:2019-02-20 11:32:58

标签: java spring-boot annotations spring-aop aspect

我正在练习海关批注,我想创建一个自定义批注,该批注将Math.random()值设置为@Entity字段(我知道我可以在构造函数中执行此操作,但我想使用注释)

  1. 我的注释:

    @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.CONSTRUCTOR) public @interface SetRandomPin {}

2。我的长相

@Around("@annotation(com.testingAnnotations.annotattions.SetRandomPin)")
            public void setUserPin(ProceedingJoinPoint joinPoint) throws NoSuchMethodException {....}
}

在我的@Entity中,当我将@SetRandomPin放入构造函数中时,setUserPin方法未触发。

仅当我更改为ElementType.METHOD并将注释移至UserService.class时,该方法才会触发。

我被困在这里,我不明白为什么要使用ElmentType而不是另一个。

1 个答案:

答案 0 :(得分:1)

默认的Spring AOP不提供构造函数拦截或私有/受保护的方法。您可以使用AspectJ做到这一点。

来自docs

  

如果您的拦截需要在目标类中包括方法调用甚至构造函数,请考虑使用Spring驱动的本机AspectJ编织,而不是Spring的基于代理的AOP框架。