我有下面的注解。
MyAnnotation.java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
SomeAspect.java
public class SomeAspect{
@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {
//Some logic
}
}
SomeOther.java
public class SomeOther{
@MyAnnotation("ABC")
public String someMethod(String name){
}
}
在上面的类中,我在**@MyAnnotation中传递“ABC”。现在我如何访问SomeAspect.java类的procede**方法中的“ABC”值?
谢谢你,谢谢
7条答案
按热度按时间ukxgm1gy1#
您可以从ProceedingJoinPoint获取Signature,并且在方法调用的情况下只需将其转换为MethodSignature。
但是您应该首先添加一个注解属性。你的示例代码没有一个,例如。
然后你就可以访问它
编辑
如果我在类级别有@MyAnnotation(“ABC”),如何获取值?
Class
也是AnnotatedElement
,因此可以通过与Method
相同的方式获得它。例如,方法声明类的注解可以使用既然你使用的是spring,你可能也想使用spring的
AnnotationUtils.findAnnotation(..)
。它像spring一样搜索注解。例如,还可以查看超类和接口方法等。编辑
你可能还对spring的
MergedAnnotations
的功能感兴趣,它是在5.2中引入的。ryevplcw2#
实际上,我认为我们可以通过另一种方式获得
value
,而不仅仅是从ProceedingJoinPoint获得,这肯定需要我们使用reflection
。尝试如下直接使用注解:在
advice params
中添加com.mycompany.MyAnnotation yourAnnotation
,在@Around
中添加@annotation(yourAnnotation)
。建议参数中的
com.mycompany.MyAnnotation
与yourAnnotation
可以是有效的变量名,因为params中的MyAnnotation
已经指出了它应该是哪个注解。这里yourAnnotation
仅用于检索注解示例。如果你想传递更多的参数,你可以尝试
args()
。更多详情,请查看其官方doc。对于Annotation值,您可以搜索
@Auditable
。lpwwtiir3#
这也可以工作--你可以使用类的反射来获取注解信息。
或
只有当您的注解在运行时可用时,这才有效,您已经正确声明了。
zbwhf8kr4#
***也解释了我是如何得到ClassLevel Annotations的。
但是,如果我之前使用了带有“*@Around(“execution(public * (..))&& @annotation(com.mycompany.MyAnnotation)”)"”的方法注解,则只能读取ClassLevel Annotations Values
我该怎么解决这个问题?如果ClassLevel Annotation被设置而不经过Method Execution,我如何触发Aspect?
我想写一个ClassLevel Annotation,
它正在导入关于“SwaggerConfiguration”的配置,我希望在其中接收“SwagerPackage”的值
如何去掉 initSwagger() 上的注解?由于 Application.class 对于 SwaggerConfiguration(Swagger Stuff,它在一个单独的库中)是未知的,因此我不能使用简单的反射,如
gajydyqb5#
使用AOP J/AOP查找方法注解和类级别注解的工作代码
kxxlusnw6#
你可以简单地按照文档中的描述绑定方法。
MyAnnotation.java
SomeAspect.java
6kkfgxo07#
Using AspectJ with Spring Applications aspectjweaver 1.8.5
为了计算方法的执行时间和使用ANOJ访问注解值,ANOJ是Java应用程序中横切关注点的强大框架,包括性能监视和方法级注解等方面。下面的示例用于为
@RequestMapping
注解创建度量执行时间的方面,并获取endpoint value
及其执行时间沿着。AspectJ to calculate execution time