在切入点内获取带注释的参数

时间:2011-07-07 00:03:45

标签: java annotations aop aspectj

我有两个注释@LookAtThisMethod@LookAtThisParameter,如果我使用@LookAtThisMethod对方法进行切入,我怎么能提取用{{1}注释的所述方法的参数}?

例如:

@LookAtThisParameter

2 个答案:

答案 0 :(得分:39)

我将此other answer的解决方案建模为一个不同但相似的问题。

MethodSignature signature = (MethodSignature) joinPoint.getSignature();
String methodName = signature.getMethod().getName();
Class<?>[] parameterTypes = signature.getMethod().getParameterTypes();
Annotation[][] annotations = joinPoint.getTarget().getClass().getMethod(methodName,parameterTypes).getParameterAnnotations();

我必须通过目标类的原因是因为被注释的类是接口的实现,因此signature.getMethod().getParameterAnnotations()返回null。

答案 1 :(得分:3)

final String methodName = joinPoint.getSignature().getName();
    final MethodSignature methodSignature = (MethodSignature) joinPoint
            .getSignature();
    Method method = methodSignature.getMethod();
    GuiAudit annotation = null;
    if (method.getDeclaringClass().isInterface()) {
        method = joinPoint.getTarget().getClass()
                .getDeclaredMethod(methodName, method.getParameterTypes());
        annotation = method.getAnnotation(GuiAudit.class);
    }

此代码涵盖Method属于接口

的情况