Dynamic load class & invoke method
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
public class ClassLoaderSample {
public static void main(String[] args) throws Exception {
String jarFile = "C:/workspace/bruce.lib/Blib.jar";
URLClassLoader dynamicLoader = URLClassLoader.newInstance(new URL[] { new URL("file", null, jarFile) }, ClassLoaderTest.class.getClassLoader());
// List content
JarInputStream jis = new JarInputStream(new FileInputStream(jarFile));
JarEntry entry = null;
while ((entry = jis.getNextJarEntry()) != null) {
String name = entry.getName();
System.out.println(name);
}
System.out.println("=====");
// Inovke method
Class objClass = Class.forName("aaa.bbb.PrintTable", true, dynamicLoader);
Object obj = objClass.newInstance();
Method objMethod = objClass.getDeclaredMethod("print");
objMethod.invoke(obj);
// Field value
Field objField = objClass.getDeclaredField("tableName");
System.out.println(objField.get(obj));
// Change field value
objField.set(obj, "myTable");
}
}