Class CompositeClassLoader


  • public class CompositeClassLoader
    extends java.lang.ClassLoader
    ClassLoader that is composed of other classloaders. Each loader will be used to try to load the particular class, until one of them succeeds. Note: The loaders will always be called in the REVERSE order they were added in.

    The Composite class loader also has registered the classloader that loaded xstream.jar and (if available) the thread's context classloader.

    Example

    CompositeClassLoader loader = new CompositeClassLoader();
     loader.add(MyClass.class.getClassLoader());
     loader.add(new AnotherClassLoader());
      
     loader.loadClass("com.blah.ChickenPlucker");
     

    The above code will attempt to load a class from the following classloaders (in order):

    • AnotherClassLoader (and all its parents)
    • The classloader for MyClas (and all its parents)
    • The thread's context classloader (and all its parents)
    • The classloader for XStream (and all its parents)

    The added classloaders are kept with weak references to allow an application container to reload classes.

    Since:
    1.0.3
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.List classLoaders  
      private java.lang.ref.ReferenceQueue queue  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(java.lang.ClassLoader classLoader)
      Add a loader to the n
      private void addInternal​(java.lang.ClassLoader classLoader)  
      private void cleanup()  
      java.lang.Class loadClass​(java.lang.String name)  
      • Methods inherited from class java.lang.ClassLoader

        clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findClass, findLibrary, findLoadedClass, findResource, findResource, findResources, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • queue

        private final java.lang.ref.ReferenceQueue queue
      • classLoaders

        private final java.util.List classLoaders
    • Constructor Detail

      • CompositeClassLoader

        public CompositeClassLoader()
    • Method Detail

      • add

        public void add​(java.lang.ClassLoader classLoader)
        Add a loader to the n
        Parameters:
        classLoader -
      • addInternal

        private void addInternal​(java.lang.ClassLoader classLoader)
      • loadClass

        public java.lang.Class loadClass​(java.lang.String name)
                                  throws java.lang.ClassNotFoundException
        Overrides:
        loadClass in class java.lang.ClassLoader
        Throws:
        java.lang.ClassNotFoundException
      • cleanup

        private void cleanup()