@Override public int accept(Method method) { for (ComponentMethodInterceptor interceptor : getInterceptors()) { if (interceptor.needToIntercept(method)) { return 1; } } return 0; } }
@Override public Object intercept(Object target, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { ArrayList<Pair<ComponentMethodInterceptor, Object>> interceptors = new ArrayList<Pair<ComponentMethodInterceptor, Object>>(); for (ComponentMethodInterceptor interceptor : getInterceptors()) { if (interceptor.needToIntercept(method)) { Object objReturnedInInterceptStart = interceptor.interceptStart(method, target); interceptors.add(new Pair<ComponentMethodInterceptor, Object>(interceptor, objReturnedInInterceptStart)); } } boolean success = false; try { Object obj = methodProxy.invokeSuper(target, args); success = true; return obj; } finally { for (Pair<ComponentMethodInterceptor, Object> interceptor : interceptors) { if (success) { interceptor.first().interceptComplete(method, target, interceptor.second()); } else { interceptor.first().interceptException(method, target, interceptor.second()); } } } } }
@Override public int accept(final Method method) { for (final ComponentMethodInterceptor interceptor : getInterceptors()) { if (interceptor.needToIntercept(method)) { return 1; } } return 0; } }
@Override public Object intercept(final Object target, final Method method, final Object[] args, final MethodProxy methodProxy) throws Throwable { final ArrayList<Pair<ComponentMethodInterceptor, Object>> interceptors = new ArrayList<>(); for (final ComponentMethodInterceptor interceptor : getInterceptors()) { if (interceptor.needToIntercept(method)) { final Object objReturnedInInterceptStart = interceptor.interceptStart(method, target); interceptors.add(new Pair<>(interceptor, objReturnedInInterceptStart)); } } boolean success = false; try { final Object obj = methodProxy.invokeSuper(target, args); success = true; return obj; } finally { for (final Pair<ComponentMethodInterceptor, Object> interceptor : interceptors) { if (success) { interceptor.first().interceptComplete(method, target, interceptor.second()); } else { interceptor.first().interceptException(method, target, interceptor.second()); } } } } }