Skip to content

Instantly share code, notes, and snippets.

@bonifaido
Created March 2, 2013 19:21
Show Gist options
  • Save bonifaido/5072720 to your computer and use it in GitHub Desktop.
Save bonifaido/5072720 to your computer and use it in GitHub Desktop.
An isolated class loader after http://blog.markturansky.com/archives/21 Usage: javac IsolatedClassLoader.java && java -ea IsolatedClassLoader
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
public class IsolatedClassLoader extends URLClassLoader {
private static URL[] classPathAsURLArray() {
List<URL> classPathUrls = new ArrayList<>();
String classpath = System.getProperty("java.class.path");
try {
for (String s : classpath.split(";")) {
classPathUrls.add(new File(s).toURI().toURL());
}
} catch (MalformedURLException ex) {
}
return classPathUrls.toArray(new URL[classPathUrls.size()]);
}
private final String[] isolatedPackages;
public IsolatedClassLoader(String... isolatedPackages) {
super(classPathAsURLArray(), ClassLoader.getSystemClassLoader().getParent());
this.isolatedPackages = isolatedPackages;
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
if (isInIsolatedPackage(name)) {
return super.loadClass(name);
} else {
return ClassLoader.getSystemClassLoader().loadClass(name);
}
}
private boolean isInIsolatedPackage(String name) {
for (String p : isolatedPackages) {
if (name.contains(p)) {
return true;
}
}
return false;
}
public static void main(String... args) throws ClassNotFoundException {
Class IsolatedClassLoader2 = new IsolatedClassLoader("").loadClass("IsolatedClassLoader");
assert IsolatedClassLoader.class != IsolatedClassLoader2;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment