我想在通知中访问我的注释值,我的注释可以放在类型或方法上。到目前为止,我能够在方法上应用注释值,但在类型上应用注释时没有成功。
@Before( value = "(@annotation(varun.mis.aspect.Logged) || within(@varun.mis.aspect.Logged *)) && (@annotation(logged))",argNames = "logged" )
有什么建议吗?
我想在通知中访问我的注释值,我的注释可以放在类型或方法上。到目前为止,我能够在方法上应用注释值,但在类型上应用注释时没有成功。
@Before( value = "(@annotation(varun.mis.aspect.Logged) || within(@varun.mis.aspect.Logged *)) && (@annotation(logged))",argNames = "logged" )
有什么建议吗?
我不相信您可以将注释应用于类型时作为参数
下面的切入点表达式
@Before("@annotation(com.some.TestAnnotation) || within(@com.some.TestAnnotation *)")
将匹配带注释的方法或带注释的类。然后,您可以声明建议以从方法或类中获取注释
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
TestAnnotation annotation = methodSignature.getMethod().getAnnotation(TestAnnotation.class);
if (annotation == null) {
Class<?> clazz = methodSignature.getDeclaringType();
annotation = clazz.getAnnotation(TestAnnotation.class);
if (annotation == null) {
System.out.println("impossible");
} else {
System.out.println("class has it");
}
} else {
System.out.println("method has it");
}
您还应该考虑方法和类型都具有注释的情况。
直接使用注释尝试如下:添加com.mycompany.MyAnnotation yourAnnotation
您的advice params
和@annotation(yourAnnotation)
在@Around
.
@Around("execution(public * *(..)) && @annotation(yourAnnotation)")
public Object procede(ProceedingJoinPoint pjp, com.mycompany.MyAnnotation yourAnnotation) {
...
yourAnnotation.value(); // get your annotation value directly;
...
}
com.mycompany.MyAnnotation
在建议中的参数就像在
@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
yourAnnotation
可以是有效的变量名,因为MyAnnotation
在 params 中已经指出它应该是哪个注释。这里yourAnnotation
仅用于检索注解实例。
如果您想传递更多参数,您可以尝试args()
.