在切入点内获取带注释的参数
我有两个注释@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属于接口的情况