From 80c3f1c36bb02261027277ed3a59eeded573e4f7 Mon Sep 17 00:00:00 2001 From: guqing Date: Mon, 18 Sep 2023 17:31:42 +0800 Subject: [PATCH] refactor: plugin resource loading to only load from plugin itself instead of delegating to core --- .../app/plugin/DefaultPluginClassLoader.java | 40 +++++++++++++++++++ .../app/plugin/PluginAutoConfiguration.java | 9 ++--- 2 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 application/src/main/java/run/halo/app/plugin/DefaultPluginClassLoader.java diff --git a/application/src/main/java/run/halo/app/plugin/DefaultPluginClassLoader.java b/application/src/main/java/run/halo/app/plugin/DefaultPluginClassLoader.java new file mode 100644 index 00000000000..1b15d61be84 --- /dev/null +++ b/application/src/main/java/run/halo/app/plugin/DefaultPluginClassLoader.java @@ -0,0 +1,40 @@ +package run.halo.app.plugin; + +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; +import lombok.extern.slf4j.Slf4j; +import org.pf4j.ClassLoadingStrategy; +import org.pf4j.PluginClassLoader; +import org.pf4j.PluginDescriptor; +import org.pf4j.PluginManager; + +/** + *
Plugin manager should create one instance of this class for every available plugin. By + * default, this class loader is a Parent First ClassLoader - it loads the classes from the + * parent class loader before loads from the plugin. Use classLoadingStrategy to change + * the loading strategy.
+ *By default, this class loader loads the resources from the plugin only - if the resource not + * found in the plugin, it returns null.
+ * + * @author guqing + * @since 2.10.0 + */ +@Slf4j +public class DefaultPluginClassLoader extends PluginClassLoader { + public DefaultPluginClassLoader(PluginManager pluginManager, PluginDescriptor pluginDescriptor, + ClassLoader parent) { + super(pluginManager, pluginDescriptor, parent, ClassLoadingStrategy.APD); + } + + @Override + public URL getResource(String name) { + log.trace("Received request to load resource '{}'", name); + return this.findResource(name); + } + + @Override + public Enumeration