У меня есть проект Java, которому нужен интерфейс «аддон». Я думал о загрузке каких-либо файлов классов, имеющих методы по умолчанию, такие как initialize()
и shutdown()
, которые будут вызываться после того, как класс был загружен в приложение. Это способ сделать это? Как мне подойти к этой проблеме?Включая классы Java и запуская их во время выполнения
ответ
Посмотрите на класс Class, в частности метод forName, который позволяет ссылаться на класс по имени. Любой класс в пути может быть загружен следующим образом. Возможно ли перегрузка Возможно, я не знаю.
В любом случае каждый класс, который требуется динамически загружать, должен будет реализовать ваш пользовательский интерфейс AddOn
, таким образом реализуя initialize
и shutdown
.
Это сработало! Я не знаю, является ли это «правильным» способом сделать это, и я рад обратной связи. Имейте в виду, что это только для загрузки одного класса: Class classfoo = Class.forName ("addonclass"); Объект foo = null; Объект [] foo2 = null; classfoo.getMethod ("initialize"). Invoke (foo, foo2); – Baversjo
Рад слышать, как это работает! Я также заинтересован в обратной связи о «правильном» способе. У меня такое ощущение, что существует более элегантный способ ... – Stephan202
«У меня такое ощущение, что существует более элегантный способ». Нет, это документированный правильный способ сделать это. – Jay
public class SomeClass {
static {
System.out.println("Being called with the class is loaded");
initialize();
}
static void initialize(){}
}
Это ваш вопрос?
Nice :) Но как я могу загрузить и запустить класс из файла? Класс не будет поставляться с приложением, пользователь «загрузит» аддон и добавит его в папку «addons». Приложение будет загружать все аддоны при запуске. – Baversjo
Yeap. На самом деле я не совсем понял, на что был поставлен ваш вопрос. Class.forName - это в значительной степени путь. – OscarRyz
Во-первых, вам понадобится ClassLoader
; вы можете получить текущий с getClass().getClassLoader()
, но тогда ваши классы аддона должны быть в пути к классам. Возможно, вам захочется создать пользовательский загрузчик классов, который будет искать ваш каталог аддона.
Как только у вас есть ClassLoader
, вы можете использовать его в load a class. Это дает вам объект Class
; вы можете использовать отражение для вызова метода initialize()
, если он присутствует.
Вам нужен только ваш собственный загрузчик классов, если вы хотите нестандартный способ загрузки класса. Если класс существует как файл «.class» в папке на пути к классу, это сделает стандартный загрузчик классов. Если вы хотите, скажем, загрузить класс из Интернета за кулисами, тогда вам понадобится пользовательский загрузчик классов. – Jay
Еще один приятный способ реализации дополнений - java.util.Serviceloader. Посмотрите на javadocs, они объясняют принцип.
Если вы посмотрите на нечто более сложное, вы можете попробовать: http://jpf.sourceforge.net.
... JPF предоставляет механизм выполнения, который динамически обнаруживает и загружает «плагины». Плагин представляет собой структурированный компонент, который описывает себя в JPF с использованием «манифеста». ...
- 1. Определить классы во время выполнения
- 2. Динамически создавать классы таблицы и java во время выполнения
- 3. Создание JAVA-файлов и их использование во время выполнения
- 4. Добавить классы (скрипты?) В встроенную Java-программу и выполнить их методы во время выполнения
- 5. Найти все классы воевавших во время выполнения Java
- 6. Как получить доступные классы во время выполнения
- 7. Скомпилировать классы Java во время выполнения плагина Eclipse
- 8. Запуская пружину @ Вал во время модульного теста
- 9. StructureMap: Настроить конкретные классы во время выполнения?
- 10. C# динамические классы во время выполнения?
- 11. CDI - классы ввода во время выполнения
- 12. Сканирование аннотаций Java во время выполнения
- 13. Внедрение новых методов и свойств в классы во время выполнения
- 14. класса во время выполнения
- 15. Какие классы java загружаются моей программой во время выполнения?
- 16. Создание объектов и перечисление их во время выполнения
- 17. C# UserControl - добавление их во время выполнения
- 18. Java интерпретируется во время выполнения?
- 19. Компиляция и использование классов Groovy из Java во время выполнения?
- 20. Перезагрузка используемых классов во время выполнения Java
- 21. Как загрузить классы во время выполнения из папки или JAR?
- 22. NoClassDefFoundError во время выполнения
- 23. Сгенерировать классы во время компиляции с помощью java и maven
- 24. Обновить код Java во время выполнения
- 25. Выбор Java-объектов во время выполнения
- 26. Как обнаружить все классы, включая подклассы с атрибутом, прикрепленным во время выполнения?
- 27. Во время выполнения Java jar возвращает java.lang.NoClassDefFoundError
- 28. java.lang.ClassCastException во время выполнения
- 29. Как добавить Dynamic идентификаторов и извлечение их во время выполнения
- 30. Принимая значения через ввод и diplaying их во время выполнения
Вы спрашиваете о динамической загрузке классов или определении поведения для инициализации для класса? –
Динамическая загрузка классов. – Baversjo