Я написал свой собственный загрузчик классов.Мне нужно, чтобы все мои классы загружались с помощью моего загрузчика классов.Я передал ВМ следующее: -Djava.system.class.loader=MyClassLoader
Только первый ссылочный класс в моем пакете загружается с помощью моего загрузчика классов.Другие классы в моем пакете загружаются с использованием AppClassLoader
.
Вот как выглядит MyClassLoader
:
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
public class MyClassLoader extends ClassLoader {
public MyClassLoader() {
super(MyClassLoader.class.getClassLoader());
}
public MyClassLoader(ClassLoader parent) {
super(parent);
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
System.out.println("MyClassLoader is loading " + name);
return super.loadClass(name);
}//loadClass
@Override
public synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
System.out.println("MyClassLoader is loading " + name + " with resolve = " + resolve);
return super.loadClass(name, resolve);
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
System.out.println("MyClassLoader findClass " + name);
return super.findClass(name);
}
@Override
protected URL findResource(String name) {
System.out.println("MyClassLoader findResource " + name);
return super.findResource(name);
}
@Override
protected Enumeration<URL> findResources(String name) throws IOException {
System.out.println("MyClassLoader findResources " + name);
return super.findResources(name);
}
@Override
protected Package getPackage(String name) {
System.out.println("MyClassLoader getPackage " + name);
return super.getPackage(name);
}
@Override
public URL getResource(String name) {
System.out.println("MyClassLoadergetResource " + name);
return super.getResource(name);
}
@Override
public InputStream getResourceAsStream(String name) {
System.out.println("MyClassLoader getResourceAsStream " + name);
return super.getResourceAsStream(name);
}
@Override
public Enumeration<URL> getResources(String name) throws IOException {
System.out.println("MyClassLoader getResources " + name);
return super.getResources(name);
}
}//MyClassLoader
У меня есть этот код в статическом блоке в одном из моих классовкоторые загружаются:
static {
System.out.println("My class loader = " + MyClass.class.getClassLoader().getClass());
}
Вывод этого был:
My class loader = class sun.misc.Launcher$AppClassLoader
Есть ли способ, которым я могу принудительно использовать мой загрузчик классов?