public <T> T createProxy(MethodHandler methodHandler, Class<?>... classes) {

		ArrayList<Class<?>> interfaces = new ArrayList<>();
		Class<?> superClass = null;

		for (Class<?> class1 : classes) {

			if (class1.isInterface()) {
				interfaces.add(class1);
			} else {
				if (superClass != null) {
					throw new IllegalArgumentException(
							"You only can pass one super class other can be interface");
				} else {
					superClass = class1;
				}
			}
		}

		ClassLoaderProvidedProxyFactory classLoaderProvidedProxyFactory = new ClassLoaderProvidedProxyFactory(
				classLoaderProvider);

		if (superClass != null) {
			classLoaderProvidedProxyFactory.setSuperclass(superClass);
		}

		if (!interfaces.isEmpty()) {
			classLoaderProvidedProxyFactory.setInterfaces(interfaces
					.toArray(new Class[0]));
		}

		classLoaderProvidedProxyFactory.setFilter(methodFilter);

		Class proxyClass = classLoaderProvidedProxyFactory.createClass();

		Proxy proxy = (Proxy) ObjenesisHelper.newInstance(proxyClass);
		proxy.setHandler(methodHandler);

		return (T) proxy;
	}