我正在练习海关批注,我想创建一个自定义批注,该批注将Math.random()值设置为@Entity字段(我知道我可以在构造函数中执行此操作,但我想使用注释)
我的注释:
@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而不是另一个。
答案 0 :(得分:1)
默认的Spring AOP不提供构造函数拦截或私有/受保护的方法。您可以使用AspectJ做到这一点。
来自docs
如果您的拦截需要在目标类中包括方法调用甚至构造函数,请考虑使用Spring驱动的本机AspectJ编织,而不是Spring的基于代理的AOP框架。