* @param interceptors The interceptors to use when proxied
* @return The proxy instance
*/
public <T> T getProxy (ClassLoader proxyClassLoader, IInterceptedInstanceWrapper<T> instance, Class<T> iface, IInterceptorManager interceptor) {
List<IInterceptorManipulator> abilities = this.getInterceptorAbilities(iface);
InterceptorInvocationHandler handler = new InterceptorInvocationHandler(instance, interceptor);
T proxy = (T) Proxy.newProxyInstance(proxyClassLoader, new Class[] { iface }, handler);
for (IInterceptorManipulator ability : abilities) {
ability.manipulate(iface, interceptor, proxy, InterceptorInvocationHandler.getStateMap(handler));
}