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

我有两个注释@LookAtThisMethod@LookAtThisParameter ,如果我使用@LookAtThisMethod对方法进行@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属于接口的情况