package com.javabook.classloader.namespace;import com.javabook.classloader.FileSysClassLoader;import com.javabook.classloader.NetworkClassLoader;/** * @author Summer Lu * @email gmluyang@gmail.com * @date 2014-8-25 * */public class ClassFromDifferentClassLoaderDemo { /** * @param args */ public static void main(String[] args) { try { // -------------------------------------------------- // File/URL // -------------------------------------------------- // URL String urls = "file:\\C:\\mybin"; // File String file = "C:\\mybin\\"; // -------------------------------------------------- // FileSysClassLoader/NetworkClassLoader // -------------------------------------------------- // networkClassLoader NetworkClassLoader networkClassLoader = new NetworkClassLoader(urls); System.out.println("networkClassLoader.getParent() ->" + networkClassLoader.getParent()); // fileSystemClassLoader FileSysClassLoader fileSysClassLoader = new FileSysClassLoader(file); System.out.println("fileSysClassLoader.getParent() ->" + fileSysClassLoader.getParent()); // -------------------------------------------------- // SimpleServiceLowerCaseImpl // -------------------------------------------------- // simpleServiceLowerCaseImpl String simpleServiceLowerCaseImpl = "com.javabook.classloader.service.impl.SimpleServiceLowerCaseImpl"; // simpleServiceLowerCaseImplClass1 Class<?> simpleServiceLowerCaseImplClass1 = networkClassLoader.loadClass(simpleServiceLowerCaseImpl); // simpleServiceLowerCaseImplClass2 Class<?> simpleServiceLowerCaseImplClass2 = fileSysClassLoader.loadClass(simpleServiceLowerCaseImpl); System.out.println("SimpleServiceLowerCaseImpl:"); System.out.println( simpleServiceLowerCaseImplClass1.getClassLoader() + " -> " + simpleServiceLowerCaseImplClass1.getName() ); System.out.println( simpleServiceLowerCaseImplClass2.getClassLoader() + " -> " + simpleServiceLowerCaseImplClass2.getName() ); System.out.println( "simpleServiceLowerCaseImplClass1 == simpleServiceLowerCaseImplClass2 ? " + (simpleServiceLowerCaseImplClass1==simpleServiceLowerCaseImplClass2) ); // -------------------------------------------------- // SimpleServiceUpperCaseImpl // -------------------------------------------------- // simpleServiceUpperCaseImpl String simpleServiceUpperCaseImpl = "com.javabook.classloader.service.impl.SimpleServiceUpperCaseImpl"; // simpleServiceUpperCaseImplClass1 Class<?> simpleServiceUpperCaseImplClass1 = networkClassLoader.loadClass(simpleServiceUpperCaseImpl); // simpleServiceUpperCaseImplClass2 Class<?> simpleServiceUpperCaseImplClass2 = fileSysClassLoader.loadClass(simpleServiceUpperCaseImpl); System.out.println("\nSimpleServiceUpperCaseImpl:"); System.out.println( simpleServiceUpperCaseImplClass1.getClassLoader() + " -> " + simpleServiceUpperCaseImplClass1.getName() ); System.out.println( simpleServiceUpperCaseImplClass2.getClassLoader() + " -> " + simpleServiceUpperCaseImplClass2.getName() ); System.out.println( "simpleServiceUpperCaseImplClass1 == simpleServiceUpperCaseImplClass2 ? " + (simpleServiceUpperCaseImplClass1==simpleServiceUpperCaseImplClass2) ); } catch (Exception e) { e.printStackTrace(); } }}
Console
networkClassLoader.getParent() ->sun.misc.Launcher$AppClassLoader@18b4aac2fileSysClassLoader.getParent() ->sun.misc.Launcher$AppClassLoader@18b4aac2SimpleServiceLowerCaseImpl:com.javabook.classloader.NetworkClassLoader@677327b6 -> com.javabook.classloader.service.impl.SimpleServiceLowerCaseImplcom.javabook.classloader.FileSysClassLoader@7f31245a -> com.javabook.classloader.service.impl.SimpleServiceLowerCaseImplsimpleServiceLowerCaseImplClass1 == simpleServiceLowerCaseImplClass2 ? falseSimpleServiceUpperCaseImpl:com.javabook.classloader.NetworkClassLoader@677327b6 -> com.javabook.classloader.service.impl.SimpleServiceUpperCaseImplcom.javabook.classloader.FileSysClassLoader@7f31245a -> com.javabook.classloader.service.impl.SimpleServiceUpperCaseImplsimpleServiceUpperCaseImplClass1 == simpleServiceUpperCaseImplClass2 ? false