使用AspectJ获取注释参数

时间:2015-06-02 08:12:02

标签: aspectj spring-aop

我在这个论坛上看了很多问题,但没有任何作用。

value

如何在执行建议时获取exceptionList的{​​{1}}和@MyAnnotation? 我使用的是Spring 4.0.6,AspectJ 1.7.4

2 个答案:

答案 0 :(得分:0)

你已经快到了。可能。

您正在使用正确的方法来检索注释,因此您可以使用值。

你的问题 - 如果我解释简约问题描述(!)你只通过你的代码片段(!)中的注释正确提供 - 是(错误的)假设坚持一个数组System.out.println()类型Class将打印出它包含的类的名称。 它没有。而是打印有关引用的信息:

[Ljava.lang.Class;@15db9742

如果需要类的名称,则必须遍历该数组的元素并使用.getName(),. getSimpleName()或提供Class方法的其他名称之一。

有关如何打印数组元素的更多信息,请访问:

What's the simplest way to print a Java array?

当然,如果问题是你从注释字段中获取空值,那么整个答案可能完全是除了这一点。但是,由于您没有提供足够的问题描述("没有任何作用" 不是问题描述!),我们只能猜测您的问题是什么。

答案 1 :(得分:0)

解决方法是确保advice方法的参数名称与AspectJ表达式中的参数名称匹配。在我的例子中,建议方法应如下所示:

@Aspect
public class MyAspect {
    @Around("@annotation(myAnnotation)")
    public Object handle(ProceedingJoinPoint joinPoint, MyAnnotation myAnnotation) {
        System.out.println(myAnnotation.exceptionList); // should print out TimeOutException
    }
}