@Bean public ComponentInstantiationPostProcessor instantiatePostProcessor() { ComponentInstantiationPostProcessor processor = new ComponentInstantiationPostProcessor(); List<ComponentMethodInterceptor> interceptors = new ArrayList<ComponentMethodInterceptor>(); interceptors.add(new TransactionContextBuilder()); processor.setInterceptors(interceptors); return processor; }
@Override public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException { if (_interceptors != null && _interceptors.size() > 0) { if (ComponentMethodInterceptable.class.isAssignableFrom(beanClass)) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(beanClass); enhancer.setCallbacks(getCallbacks()); enhancer.setCallbackFilter(getCallbackFilter()); enhancer.setNamingPolicy(ComponentNamingPolicy.INSTANCE); Object bean = enhancer.create(); return bean; } } return null; }
@Override public int accept(Method method) { for (ComponentMethodInterceptor interceptor : getInterceptors()) { if (interceptor.needToIntercept(method)) { return 1; } } return 0; } }
@Bean public ComponentInstantiationPostProcessor instantiatePostProcessor() { final ComponentInstantiationPostProcessor processor = new ComponentInstantiationPostProcessor(); final List<ComponentMethodInterceptor> interceptors = new ArrayList<>(); interceptors.add(new TransactionContextBuilder()); processor.setInterceptors(interceptors); return processor; } }
@Override public Object postProcessBeforeInstantiation(final Class<?> beanClass, final String beanName) throws BeansException { if (_interceptors != null && _interceptors.size() > 0) { if (ComponentMethodInterceptable.class.isAssignableFrom(beanClass)) { final Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(beanClass); enhancer.setCallbacks(getCallbacks()); enhancer.setCallbackFilter(getCallbackFilter()); enhancer.setNamingPolicy(ComponentNamingPolicy.INSTANCE); final Object bean = enhancer.create(); return bean; } } return null; }
@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()); } } } } }