-
What it is:
- Any loader that extends
java.lang.ClassLoader. - Written in Java, giving developers control over where and how classes are loaded.
- Any loader that extends
-
What it loads:
- Custom classes not found in the core JDK.
- Classes from non-standard locations (e.g., network, encrypted JAR, DB).
-
When it’s used:
- Frameworks (e.g., Spring Boot, OSGi) often use custom loaders to manage class isolation.
- Useful when building plugin systems or sandboxing.
👉 Example:
class MyClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
byte[] b = loadClassData(name); // custom load logic
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) { /* read bytes */
return null;
}
}
ClassLoader loader = new MyClassLoader();
Class<?> clazz = loader.loadClass("com.example.Plugin");