private AggregateClassLoader newClassLoader(Class<?> clazz, Set<Class<?>> interfaces) { Set<ClassLoader> loaders = Sets.newLinkedHashSet(); addClassLoaders(clazz, loaders); for (Class<?> iface : interfaces) { loaders.add(iface.getClassLoader()); } AggregateClassLoader aggregateClassLoader = AggregateClassLoader.newInstanceWithNoLoaders(); for (ClassLoader cl : loaders) { aggregateClassLoader.addLast(cl); } return aggregateClassLoader; }
protected synchronized void loadRecursiveClassLoader() { if (recursiveClassLoader!=null) return; AggregateClassLoader cl = AggregateClassLoader.newInstanceWithNoLoaders(); cl.addFirst(childrenClassLoader); ClassLoader local = getLocalClassLoader(); if (local != null) cl.addFirst(local); if (parent == null) { // we are root. include the mgmt base classloader and/or standard class loaders ClassLoader base = mgmt != null ? ((ManagementContextInternal)mgmt).getBaseClassLoader() : null; if (base != null) cl.addFirst(base); else { cl.addFirst(getClass().getClassLoader()); cl.addFirst(Object.class.getClassLoader()); } } recursiveClassLoader = cl; }
@SuppressWarnings("unchecked") private <T> T proxy(Class<T> clazz) { AggregateClassLoader aggregateClassLoader = AggregateClassLoader.newInstanceWithNoLoaders(); aggregateClassLoader.addLast(clazz.getClassLoader()); aggregateClassLoader.addLast(getClass().getClassLoader());