• What it is:

    • Any loader that extends java.lang.ClassLoader.
    • Written in Java, giving developers control over where and how classes are loaded.
  • 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");