Включение классов Java и запуск их во время выполнения - PullRequest
0 голосов
/ 18 мая 2009

У меня есть проект Java, который нуждается в интерфейсе дополнения. Я думал о загрузке некоторых файлов классов с методами по умолчанию, такими как initialize() и shutdown(), которые будут вызываться после загрузки класса в приложение. Это способ сделать это? Как бы я подошел к этой проблеме?

Ответы [ 5 ]

3 голосов
/ 18 мая 2009

Посмотрите на класс Class , в частности, метод forName , который позволяет ссылаться на класс по имени. Любой класс в пути может быть загружен следующим образом. Возможна ли перезагрузка , я не знаю.

В любом случае каждый класс, который вы хотите динамически загрузить, должен был бы реализовать ваш пользовательский интерфейс AddOn, таким образом реализуя initialize и shutdown.

1 голос
/ 19 мая 2009

Если вы посмотрите на что-то более сложное, вы можете попробовать: http://jpf.sourceforge.net.

... JPF предоставляет механизм времени выполнения, который динамически обнаруживает и загружает «плагины». Плагин - это структурированный компонент, который описывает себя для JPF с помощью «манифеста». ...

1 голос
/ 18 мая 2009

Для начала вам понадобится ClassLoader; Вы можете получить текущий с getClass().getClassLoader(), но тогда ваши аддон-классы должны быть в пути к классам. Возможно, вы захотите создать собственный загрузчик классов, который будет искать в вашем каталоге дополнений.

Как только вы получите ClassLoader, вы можете использовать его для загрузки класса . Это дает вам Class объект; затем вы можете использовать отражение, чтобы вызвать метод initialize(), если он присутствует.

0 голосов
/ 18 мая 2009

Еще один хороший способ реализации аддонов - java.util.Serviceloader . Взгляните на javadocs, они объясняют принцип.

0 голосов
/ 18 мая 2009
public class SomeClass { 
    static {
        System.out.println("Being called with the class is loaded");
        initialize();
    }
    static void initialize(){}
}

Это ваш вопрос?

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