Можно ли получить объект загрузчика класса Extension? - PullRequest
1 голос
/ 31 августа 2011

Я изучаю концепции ClassLoading в Java. Я знаю, что можно получить System classLoader с помощью метода ClassLoader.getSystemClassLoader () с помощью класса java.lang.ClassLoader. Можно ли также получить загрузчик класса Extension? Я знаю, что JVM загружает BootStrapClassLoader, и мы не можем создать его экземпляр. Но как насчет загрузчика класса Extension?

Заранее спасибо.

1 Ответ

1 голос
/ 21 января 2012

Вы можете попробовать это sun.net.spi.nameservice.dns.DNSNameService.getClassLoader().DNSNameService - это класс, который существует как загрузчик класса Extension.

Другой вариант - написать что-то вроде этого:

         ClassLoader cl =new Object(){}.getClass().getEnclosingClass().getClassLoader();
         ClassLoader prev = null;
         while(cl!=null){
             prev=cl;
             cl=cl.getParent();
         }
         System.out.println(prev);

prev будет содержать ссылку на загрузчик класса расширения.

Примечание: Вы можете написать помимо new Object(){}.getClass().getEnclosingClass().getClassLoader() идиома Thread.currentThread().getContextClassLoader() или даже проще YourClassName.class.getClassLoader() Хотя эти идиомы не идентичны, любой из них выполнит свою работу.

См. http://www.javacodegeeks.com/2011/03/understanding-extending-java.html для более подробной информации.

...