Cambio de Java ClassLoader
Tengo alguna claseA
:
<code>public class A { public A(String str) { System.out.println("Create A instance: " + str); } public void methodA() { System.out.println("#methodA1()"); } } </code>
Y mi implementación del cargador de clases:
<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>
Y ahora trato de cambiar el cargador de clases predeterminado en el hilo actual:
<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>
YChangeLoaderTest
salida:
<code>Create A instance: 1 #methodA1() </code>
Ninguno
<code>Load: ... </code>
¿Por qué? Como puedo cambiarClassLoader
en algún hilo?