private MethodWrapper putIfAbsent(Method method, String methodName, MethodInvocationProceedingJoinPoint pjp) throws NoSuchMethodException { MethodWrapper methodWrapper = thriftMethodWrapperMap.get(method); if (methodWrapper == null) { Method targetMethod = pjp.getTarget().getClass().getMethod(methodName, method.getParameterTypes()); ThriftMethodProvider provider = targetMethod.getAnnotation(ThriftMethodProvider.class); methodWrapper = new MethodWrapper() .setMethod(method) .setMethodName(methodName) .setReturnType(method.getReturnType()) .setAccessLogOn(provider.accessLogOn()); int rate = provider.rate(); if (rate > 0) { methodWrapper.setRateLimiter(RateLimiter.create(provider.rate())); } thriftMethodWrapperMap.put(method, methodWrapper); } return methodWrapper; }