Я пытаюсь создать программу, которая может загрузить неизвестный набор плагинов из подпапки «Плагины». Все эти плагины реализуют один и тот же интерфейс. Мне нужно знать, как мне найти все классы в этой папке, чтобы я мог создавать и использовать их?Как получить доступ к классам Java в подпапке
ответ
MyInterface.java
Заглушка интерфейс.
package test;
public interface MyInterface {
public void printSomething();
}
TestClass.java
тест класс должен быть загружен, реализуя свой интерфейс.
import test.MyInterface;
public class TestClass implements MyInterface {
public void printSomething() {
System.out.println("Hello World, from TestClass");
}
}
(Составитель класс файл, помещенный в "подпапке /".)
Test.java
Полная тестовая программа, которая загружает все файлы класса "подпапку /" и создает экземпляр и запускает на нем метод интерфейса.
package test;
import java.io.File;
public class Test {
public static void main(String[] args) {
try {
ClassLoader cl = ClassLoader.getSystemClassLoader();
File subfolder = new File("subfolder");
for (File f : subfolder.listFiles()) {
String s = f.getName();
System.out.println("Loading " + s);
Class cls = cl.loadClass(s.substring(0, s.lastIndexOf('.')));
MyInterface o = (MyInterface) cls.newInstance();
o.printSomething();
}
} catch (ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
}
}
Выход из программы испытаний выше:
Загрузка TestClass.class
Hello World, от TestClass
Просмотрите папку с File.listFiles() и используйте экземпляр JarClassLoader для загрузки классов там.
Или добавьте description.xml в каждую из этих банок, если они находятся в пути к классам, и используйте getClass(). GetClassLoader(). FindResources ("description.xml"), чтобы загрузить все описания, а затем у вас есть все классы плагинов для загрузки.
Проверить java.util.ServiceLoader
Служба представляет собой хорошо известный набор интерфейсов и (обычно) абстрактных классов. Поставщик услуг - это конкретная реализация службы. Классы в провайдере обычно реализуют интерфейсы и подклассы классов, определенных в самой службе. Поставщики услуг могут быть установлены в реализации платформы Java в виде расширений, то есть файлов jar, помещенных в любой из обычных каталогов расширений. Поставщики также могут быть доступны, добавив их в путь к классу приложения или с помощью некоторых других средств для платформы.
This article объясняет детали.
аннотировать классы реализации с аннотациями и использование scannotation это байтовый код сканирования c lass files, и является порядком величин быстрее, чем что-либо еще, вы можете использовать его для мгновенного поиска всего очень большого класса.
- 1. Как получить доступ к классам в Java
- 2. Как получить доступ к сервлету в подпапке?
- 3. Как получить доступ к подпапке из поддомена?
- 4. Получить доступ к другим классам
- 5. Как получить доступ к java-классам в пакете по умолчанию?
- 6. Как получить доступ к классам библиотеки java в шаблоне Freemarker
- 7. JAVA - Получить доступ к файлу в другой подпапке
- 8. Java: Может ли LD_LIBRARY_PATH получить доступ к пути к классам?
- 9. Войти и получить доступ к классам?
- 10. wpf доступ к подпапке
- 11. Как получить доступ к Java-классам из приложения/программы Ui5?
- 12. Доступ к частным классам на классе Java
- 13. Доступ к подпапке сайта Wordpress
- 14. Доступ к подпапке сайта cakephp
- 15. Доступ к классам C#
- 16. Невозможно получить доступ к классам через WCF
- 17. Невозможно получить доступ к моим классам Propel
- 18. Доступ к классам в Asp.net
- 19. Как получить доступ к вложенным статическим классам с помощью Rjb?
- 20. Доступ к классам в векторах
- 21. доступ к контроллеру в подпапке codeigniter
- 22. Доступ к NSMutableDictionary по классам
- 23. Как получить доступ к дополнительным классам в событиях
- 24. Как получить доступ к пользовательским классам в symfony2?
- 25. Как получить доступ к классам моделей в J-запросе?
- 26. Как получить доступ к классам в App_Code с помощью ObjectDataSource?
- 27. Как получить доступ к классам эффектов GDI + в C#
- 28. Как получить доступ к нескольким классам div в приложении?
- 29. Как получить доступ к родительским классам призраков в рубине?
- 30. NSMutableDictionary Доступ к различным классам
Этот раствор зависит от упаковки? –
Что это значит? Нет, не совсем... – aioobe