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



我有两个注释@LookAtThisMethod@LookAtThisParameter,如果我在@LookAtThisMethod的方法周围有一个切入点,我如何提取用@LookAtThisParameter注释的所述方法的参数?

例如:

@Aspect
public class LookAdvisor {
    @Pointcut("@annotation(lookAtThisMethod)")
    public void lookAtThisMethodPointcut(LookAtThisMethod lookAtThisMethod){}
    @Around("lookAtThisMethodPointcut(lookAtThisMethod)")
    public void lookAtThisMethod(ProceedingJoinPoint joinPoint, LookAtThisMethod lookAtThisMethod) throws Throwable {
        for(Object argument : joinPoint.getArgs()) {
            //I can get the parameter values here
        }
        //I can get the method signature with:
        joinPoint.getSignature.toString();

        //How do I get which parameters  are annotated with @LookAtThisParameter?
    }
}

我根据另一个不同但类似的问题的答案来建模我的解决方案。

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。

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属于接口
的情况

相关内容

  • 没有找到相关文章

最新更新