Mudança Java ClassLoader
Eu tenho aulaA
:
<code>public class A { public A(String str) { System.out.println("Create A instance: " + str); } public void methodA() { System.out.println("#methodA1()"); } } </code>
E minha implementação do carregador de classes:
<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>
E agora eu tento alterar o carregador de classes padrão no segmento atual:
<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>
EChangeLoaderTest
saída:
<code>Create A instance: 1 #methodA1() </code>
Ninguém
<code>Load: ... </code>
Por quê? Como eu posso mudarClassLoader
em algum segmento?