В Java можно написать свой
ClassLoader и динамически загружать .class-файлы, например, как плагины.Базовый скелет кастомного загрузчика. Здесь
dir это папка, где лежат ваши плагины (.class файлы):public class PluginClassLoader extends ClassLoader {
private final Path dir;
public PluginClassLoader(Path dir, ClassLoader parent) {
super(parent);
this.dir = dir;
}}Переопределяем
findClass. Где defineClass() превращает сырые байты в настоящий Java-класс.@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 pluginsDir = Path.of("plugins");
PluginClassLoader loader =
new PluginClassLoader(pluginsDir, ClassLoader.getSystemClassLoader());
Class<?> pluginClass = loader.loadClass("com.example.Plugin");
Object plugin = pluginClass.getDeclaredConstructor().newInstance();🔥 Дальше можно через интерфейсы или рефлексию вызвать методы плагина.
👉 Java Ready | #совет
