Java ClassLoader-Änderung
Ich habe UnterrichtA
:
<code>public class A { public A(String str) { System.out.println("Create A instance: " + str); } public void methodA() { System.out.println("#methodA1()"); } } </code>
Und meine Klassenladeprogramm-Implementierung:
<code>public class MyClassLoader extends ClassLoader { public MyClassLoader() { super(); } @Override public synchronized Class<?> loadClass(String name) throws ClassNotFoundException { System.out.println("Load: " + name); return super.loadClass(name); } } </code>
Und jetzt versuche ich, den Standardklassenlader im aktuellen Thread zu ändern:
<code>import java.util.ArrayList; import java.util.List; public class ChangeLoaderTest { public static void main(String[] args) { // Save class loader so that we can restore later. ClassLoader oldLoader = Thread.currentThread().getContextClassLoader(); MyClassLoader newLoader = new MyClassLoader(); try { // Set new classloader. Thread.currentThread().setContextClassLoader(newLoader); // My class. A a = new A("1"); a.methodA(); // Standard Java class. List<Integer> list = new ArrayList<Integer>(); list.add(2); list.add(3); } finally { // Restore. Thread.currentThread().setContextClassLoader(oldLoader); } } } </code>
UndChangeLoaderTest
Ausgabe:
<code>Create A instance: 1 #methodA1() </code>
Niemand
<code>Load: ... </code>
Warum? Wie ich mich verändern kannClassLoader
in einen Thread?