TGViewer
Java Ready | Программирование Java Ready | Программирование @java_ready · 9.26K subscribers
Post #1591 1.98K
Система плагинов!

Когда хочешь расширить функционал приложения без перекомпиляции, хорошо использовать плагины. В Java можно динамически загружать классы, используя ClassLoader.

Создаём интерфейс плагина:
public interface Plugin {
void execute();
}


Создаём класс плагина:
public class MyPlugin implements Plugin {
@Override
public void execute() {
System.out.println("Плагин загружен!");
}
}


Реализуем кастомный ClassLoader для загрузки плагинов:
public class PluginClassLoader extends ClassLoader {
private final Path dir;

public PluginClassLoader(Path dir) {
this.dir = dir;
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
try {
Path file = dir.resolve(name.replace('.', '/') + ".class");
byte[] bytes = Files.readAllBytes(file);
return defineClass(name, bytes, 0, bytes.length);
} catch (IOException e) {
throw new ClassNotFoundException(name, e);
}
}
}


Загружаем плагин динамически:
Path pluginDir = Path.of("plugins");
PluginClassLoader loader = new PluginClassLoader(pluginDir);
Class<?> pluginClass = loader.loadClass("MyPlugin");
Plugin plugin = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
plugin.execute();


Таким образом, можно добавлять новые плагины без перезапуска приложения и динамически загружать новые классы.

👉 Java Ready | #совет
  • 👍 6
  • ❤ 5
  • 🔥 4
More from @java_ready
  1. Oct 9, 2026photo post
  2. Oct 8, 2026Почему String.format может заменить точку на запятую? Представим, что программа сохраняет…
  3. Oct 7, 2026Почему split(".") в Java не делит строку по точке? На первый взгляд кажется, что достаточн…
  4. Oct 6, 2026Безопасная настройка retry для всей системы! В статье Java-разработчик делится опытом внед…
  5. Oct 5, 2026Почему после Stream.toList() нельзя добавить элемент? При работе со Stream часто нужно соб…
  6. Oct 5, 2026Находим три самых популярных товара! Есть поток покупок с повторяющимися названиями. Постр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →