@Auditable(value=1)
public ResponseEntity upload(@RequestParam file){
// Code
}
这段代码使用了下面给出的@Auditable注解:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
Integer value() default 0;
}
我有一个方面如下
@Before("@annotation(auditable)")
public void audit(Integer auditable) {
AuditCode code = auditable;
// ...
}
在上面的例子中,即使@Auditable
中的A字母是大写的,而@annotation(auditable)
中的A字母是小写的,@Auditable
表达式是如何与@annotation(auditable)
表达式匹配的?
我试着阅读文档,但它只是给出了事实,而没有解释注解表达式匹配的边界以及在什么情况下会失败。我希望注解匹配是大小写敏感的,但我认为更深层次的事情正在发生,比如@Auditable
注解的对象创建,然后该对象以某种方式与Aspect匹配。
1条答案
按热度按时间juzqafwq1#
Spring AOP或AspectJ中的注解是按其类型匹配的。语法
@annotation(my.package.MyAnnotation)
@annotation(myAnnotationParameter)
与像MyAnnotation myAnnotationParameter
这样的建议参数组合,例如,或者,如果你需要连接点,
如果注解参数像这样绑定到建议参数,那么它在建议方法签名和切入点中的名称应该完全匹配,即以区分大小写方式。
但是你的例子没有任何意义,我怀疑你在任何类似的教程中找到了它:
这将不匹配,因为
Integer
不是注解类型。它甚至不能编译,因为你不能把Integer
赋值给AuditCode
的任何类型--除非AuditCode
恰好是Integer
的子类,这是不可能的,因为Integer
是一个final类。下一次,请不要发布你直接在Stack Overflow上编写的未经测试的伪代码,而是你实际编译并在本地机器上运行的代码。