為了實現這種方式,我們需要創建兩個不同類型的類加載器。每一個ComponentClassLoader需要擴展Java的URLClassLoader來提供需要的邏輯來從一個JAR中獲取.class文件。當然他也會執行兩個其他的任務。在創建的時候,他會獲取JAR清單文件并定位一個新屬性Restricted-Class-Path。不像Sun提供的Class-Path屬性,這個屬性暗示特定的JAR應該只對這個組件有效。 public class ComponentClassLoader extends URLClassLoader { // ... public ComponentClassLoader (MasterClassLoader master, File file) { // ... JarFile jar = new JarFile(file); Manifest man = jar.getManifest(); Attributes attr = man.getMainAttributes(); List l = new ArrayList(); String str = attr.getValue("Restricted-Class-Path"); if (str != null) { StringTokenizer tok = new StringTokenizer(str); while (tok.hasMoreTokens()) { l.add(new File(file.getParentFile(), tok.nextToken()); } } this.dependencies = l; } public Class loadClass (String name, boolean resolve) throws ClassNotFoundException { try { // Try to load the class from our JAR. return loadClassForComponent(name, resolve); } catch (ClassNotFoundException ex) {} // Couldn't find it -- let the master look for it // in another components. return master.loadClassForComponent(name, resolve, dependencies); } public Class loadClassForComponent (String name, boolean resolve) throws ClassNotFoundException { C