@Override
	public ClassLoader get(ProxyFactory factory) {
		Class[] interfaces = factory.getInterfaces();
		Set<ClassLoader> classLoaders = new HashSet<>();

		Class superclass = factory.getSuperclass();
		if (superclass != null && superclass.getClassLoader() != null) {
			classLoaders.add(superclass.getClassLoader());
		}

		if (interfaces != null) {
			for (Class clazz : interfaces) {
				classLoaders.add(clazz.getClassLoader());
			}
		}
		
		ClassLoader multiClassLoader;
		
		if(classLoaderCache.containsKey(classLoaders))
		{
			multiClassLoader = classLoaderCache.get(classLoaders);
		}
		else
		{
			multiClassLoader = new MultiClassLoader(classLoaders);
			classLoaderCache.put(classLoaders, multiClassLoader);
		}

		return multiClassLoader;
	}