Пользовательский загрузчик классов Java: некоторые классы не загружаются моим загрузчиком классов - PullRequest
1 голос
/ 23 января 2011

Я пишу пользовательский загрузчик классов, я установил его в качестве загрузчика классов по умолчанию, используя параметр

-Djava.system.class.loader=MyClassLoader

Большинство классов загружаются моим загрузчиком классов, но некоторые классы нет, почему? Эти классы находятся во внешнем jar-файле.

UPDATE Вот пример

public class Main{
    public static void main(String[] args) {
        try{
            // A simple class loader, ovveride loadClass
            // method and print in stdout the name of the class loaded.
            MyClassLoader classLoader=new MyClassLoader(MyClassLoader.class.getClassLoader());
            Class init=classLoader.loadClass("Initializer");
            Object instance=init.newInstance();
            init.getMethod("init").invoke(instance);
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

public class A{

    public A() {
        System.out.println("Im A");
    }
}

public class Initializer {

     public void init() {
        A a=new A();
    }
}

Проблема в том, что я ожидаю, что класс A загружается моим загрузчиком классов, но этого не происходит, почему?

UPDATE

В любом случае, я хочу загрузить ВСЕ свои классы с помощью моего загрузчика классов, потому что я хочу зашифровать код класса и расшифровать его во время выполнения. Итак, как я могу использовать загрузчик классов в качестве загрузчика классов по умолчанию для ВСЕХ моих классов?

Спасибо.

1 Ответ

1 голос
/ 24 января 2011

Все, что находится под java.lang, всегда загружается загрузчиком классов начальной загрузки.

С http://en.wikipedia.org/wiki/Java_Classloader:

Когда JVM запущена, три загрузчика классовб [3] [4]: ​​

  1. Загрузчик класса Bootstrap
  2. Загрузчик класса расширений
  3. Загрузчик класса системы

Класс начальной загрузкиloader загружает основные библиотеки Java [5] (каталог / lib).Этот загрузчик классов, который является частью основной JVM, написан на собственном коде.

Загрузчик классов расширений загружает код в каталоги расширений (/ lib / ext или любой другой каталог, указанный в java.ext).системное свойство .dirs).Он реализуется классом sun.misc.Launcher $ ExtClassLoader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...