tengo alguna clase A
:Java ClassLoader cambio
public class A {
public A(String str) {
System.out.println("Create A instance: " + str);
}
public void methodA() {
System.out.println("#methodA1()");
}
}
Y mi aplicación cargador de clases:
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);
}
}
Y ahora trato de cambiar el cargador de clases defecto en hilo actual:
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);
}
}
}
Y ChangeLoaderTest
salida:
Create A instance: 1
#methodA1()
Nadie
Load: ...
¿Por qué? ¿Cómo puedo cambiar ClassLoader
en algún hilo?
* "Tengo alguna clase A:" * Ya estoy aburrido. No, eso no es estrictamente cierto, pero no voy a seguir leyendo. Mientras que algunas personas piensan que es mejor 'abstraer un problema' hasta el punto de poder expresarlo como símbolos obtusos, prefiero un contexto que ayude a explicar qué hay en la clase 'A' que hace que quieras cargarlo dinámicamente. ES DECIR. la clase 'A' podría ser una' UserDefinedPlugIn' - la última proporciona algún contexto, la primera no. –
Ok, puedo explicar el contexto de esta pregunta. Tengo una clase que lee imágenes en 'BufferedImage'. A veces es 'ImageIO.read (archivo)', a veces es 'Sanselan.getBufferedImage (file)'.Tengo mi propia clase para guardar imágenes y debo crear 'BuffredImage' desde el archivo, luego copiar datos de' BufferedImage' a mi objeto. Quiero usar alguna clase proxy para capturar todos los métodos '#get (...)' para guardar información en mi objeto. – dzav