@Override public Class<?> loadClass(final String name) throws ClassNotFoundException { if (name.startsWith(getClass().getPackage().getName())) { return findClass(name); } return super.loadClass(name); }
@Before public void setUp() throws Exception { loader1 = new TestClassLoader(); loader2 = new TestClassLoader(); loader3 = new TestClassLoader(); assertNotSame(loader1, loader2); assertNotSame(loader1, loader3); assertNotSame(loader2, loader3); }
@Override protected Class<?> findClass(final String name) throws ClassNotFoundException { final String path = name.replace('.', '/').concat(".class"); final URL resource = super.getResource(path); if (resource == null) { throw new ClassNotFoundException(name); } try { final URLConnection uc = resource.openConnection(); final int len = uc.getContentLength(); final InputStream in = new BufferedInputStream(uc.getInputStream()); final byte[] bytecode = new byte[len]; try { IOUtils.readFully(in, bytecode); } finally { Closer.closeSilently(in); } return defineClass(name, bytecode, 0, bytecode.length); } catch (final IOException e) { Throwables.rethrow(e); return null; // unreachable } } }