标签:
拦截泛型方法时,如果采用如下风格的代码会报错java.lang.NoSuchMethodException,:
Method methodArr = joinPoint.getSignature().getDeclaringType().getMethod(methodName, parameterTypes);
因为泛型方法所在的类里没有具体参数的方法...
不过,可以获取目标类型的所有方法根据方法名称依次匹配;这样就可以在拦截的方法上加上自定义注解信息,完成特定的业务需求。
/** * 获取被拦截的方法 */ private Method getTargetMethod(ProceedingJoinPoint joinPoint){ Object[] args = joinPoint.getArgs(); Method targetMethod = null; if (SimpleUtil.isNotEmpty(args)) { Class<?>[] parameterTypes = new Class[args.length]; for (int i = 0; i < args.length; i++) { parameterTypes[i] = args[i].getClass(); } String methodName = joinPoint.getSignature().getName(); Method[] methodArr = joinPoint.getSignature().getDeclaringType().getMethods(); for(Method method : methodArr){ if (method.getName().equals(methodName)){ //这里来判断 targetMethod = method; break; } } } return targetMethod; }
标签:
原文地址:http://my.oschina.net/placeholder/blog/511036