我有以下注释。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
public class SomeAspect{
@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {
//Some logic
}
}
public class SomeOther{
@MyAnnotation("ABC")
public String someMethod(String name){
}
}
在上面的课中, @MyAnnotation中* 传递了“ ABC ” 。现在如何在 SomeAspect.java 类的 处理
方法中访问“ ABC ”值?
***
谢谢!
您可以从ProceedingJoinPoint获取签名,如果方法调用,只需将其转换为MethodSignature即可。
@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {
MethodSignature signature = (MethodSignature) call.getSignature();
Method method = signature.getMethod();
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
}
但是,您应该首先添加一个注释属性。您的示例代码没有一个,例如
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
然后就可以访问它
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
String value = myAnnotation.value();
编辑
如果我在班级有@MyAnnotation(“ ABC”),如何获取价值?
A Class
也是A
AnnotatedElement
,因此您可以从A
获得相同的方式Method
。例如,可以使用以下方法获取方法声明类的注释:
Method method = ...;
Class<?> declaringClass = method.getDeclaringClass();
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class)
由于您正在使用spring,因此您可能还需要使用spring的AnnotationUtils.findAnnotation(..)
。它像spring一样搜索注释。例如,还要查看超类和接口方法等。
MyAnnotation foundAnnotation = AnnotationUtils.findAnnotation(method, MyAnnotation.class);
编辑
您可能还会MergedAnnotations
对5.2中引入的spring的功能感兴趣。
我有以下注释。 在上面的类中,我在@MyAnnoting中传递了“ABC”。现在我如何在某些spect.java类的程序方法中访问“ABC”值? 谢谢
我有一个方面,处理所有有自定义注释的方法。 注释有一个枚举参数,我必须在方面中获得值: 有没有办法从ProcedingJoinPoint获得实现方法的签名?
我想从方法中检索注释(自定义编写的注释)。通常我可以通过访问 但是如果bean由CDI容器管理(我使用的是OpenWebBeans),那么类在运行时会得到增强。然后我必须使用超类来请求注释。目前,我试图通过在类名中查找“$$”来检测是否管理该类。但对我来说,这似乎是一个非常肮脏的解决方案。 有什么好方法可以从CDI管理的bean中检索注释吗? 详细地说,我的代码是这样的:我创建了一个注释“Cool
问题内容: 我想用Spring / AOP和注解实现声明式安全性。如您在下一个代码示例中看到的,我使用参数“ allowedRoles”定义了“受限注释”,用于定义允许谁执行建议的方法。 现在的问题是,在我的建议中,我无法访问已定义的注释: 上面的方法总是返回null(根本没有找到注释)。有一个简单的解决方案吗? 我阅读了有关使用AspectJ代理的内容,但我不希望使用此代理。 问题答案: 我认为
作为我的一个要求,我创建了一个包含多个方法的inteface,每个方法都用我自己的java自定义注释进行了注释。我的实现类有一个spring aop方面,但我无法获得aop方面的自定义注释。在进行调试后,我明白了我的自定义注释是接口的一部分,而不是在实现类中。
我有一门课,比如下面的测试 有一个C1班 我给这门课打电话如下 当我调试时,我将i1设置为null。 请告知我做错了什么 注意:。我必须在xyx()中使用类Test,因为它是伪代码,并且xyx()中有很多代码