ClassLoader enables Java applications to load classes dynamically at runtime rather than during application startup. This capability is commonly used in plugin-based architectures, where new modules can be added without modifying or restarting the main application. By using a custom ClassLoader, such as URLClassLoader, plugin classes can be loaded from external JAR files or directories and instantiated through reflection.
Key Points: • ClassLoader allows applications to load classes dynamically from external locations such as JAR files or plugin directories. • URLClassLoader is commonly used to load plugin classes at runtime without recompiling the application. • Dynamic class loading makes applications extensible, enabling new features to be added without changing the core system.
Example: Consider an IDE that supports third-party plugins. Developers can place plugin JAR files in a plugins folder, and the application loads them at startup or runtime using a custom ClassLoader, making new functionality available immediately.
Code Example:
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
public class PluginLoader {
public static void main(String[] args)
throws Exception {
File pluginJar =
new File("plugins/MyPlugin.jar");
URL[] urls =
{pluginJar.toURI().toURL()};
URLClassLoader classLoader =
new URLClassLoader(urls);
Class<?> pluginClass =
classLoader.loadClass(
"com.plugin.MyPlugin");
Object plugin =
pluginClass.getDeclaredConstructor()
.newInstance();
System.out.println(
"Plugin Loaded: "
+ plugin.getClass().getName());
classLoader.close();
}
}Interview Tip: A concise interview answer is: To load plugins dynamically, I would place plugin classes in external JAR files and use a custom ClassLoader such as URLClassLoader to load them at runtime. After loading the class, I can instantiate it using reflection, allowing the application to support new plugins without recompilation or restart.