@Override public boolean preCall(Request request, Response responder, ServiceMethodInfo serviceMethodInfo) throws Exception { Method method = serviceMethodInfo.getMethod(); MethodInterceptors methodInterceptors = map.get(method); if (methodInterceptors == null || !methodInterceptors.annotationScanned) { List<Interceptor> interceptors = new CopyOnWriteArrayList<>(); Timed timed = getTimedAnnotation(method); if (timed != null) { Timer timer = MetricAnnotation.timer(Metrics.getInstance().getMetricService(), timed, method); Interceptor interceptor = new TimerInterceptor(timer); interceptors.add(interceptor); } Metered metered = getMeteredAnnotation(method); if (metered != null) { Meter meter = MetricAnnotation.meter(Metrics.getInstance().getMetricService(), metered, method); Interceptor interceptor = new MeterInterceptor(meter); interceptors.add(interceptor); } Counted counted = getCountedAnnotation(method); if (counted != null) { Counter counter = MetricAnnotation.counter(Metrics.getInstance().getMetricService(), counted, method); Interceptor interceptor = new CounterInterceptor(counter, counted.monotonic()); interceptors.add(interceptor); } methodInterceptors = new MethodInterceptors(true, interceptors); map.put(method, methodInterceptors); } return methodInterceptors.preCall(request, responder, serviceMethodInfo); }