public class MultipleParentClassLoader extends InjectionClassLoader
This ClassLoader
is capable of loading classes from multiple parents. This class loader
implicitly defines the bootstrap class loader to be its direct parent as it is required for all class loaders.
This can be useful when creating a type that inherits a super type and interfaces that are defined by different,
non-compatible class loaders.
Note: Instances of this class loader can have the same class loader as its parent multiple times,
either directly or indirectly by multiple parents sharing a common parent class loader. By definition,
this implies that the bootstrap class loader is #(direct parents) + 1
times a parent of this class loader.
For the ClassLoader.getResources(java.lang.String)
method, this means that this class loader
might return the same url multiple times by representing the same class loader multiple times.
Important: This class loader does not support the location of packages from its multiple parents. This breaks package equality when loading classes by either loading them directly via this class loader (e.g. by subclassing) or by loading classes with child class loaders of this class loader.
Modifier and Type | Class and Description |
---|---|
static class |
MultipleParentClassLoader.Builder
A builder to collect class loader and that creates a
MultipleParentClassLoader only if multiple or no
ClassLoader s are found in the process. |
protected static class |
MultipleParentClassLoader.CompoundEnumeration
A compound URL enumeration.
|
InjectionClassLoader.Strategy
Constructor and Description |
---|
MultipleParentClassLoader(ClassLoader parent,
List<? extends ClassLoader> parents)
Creates a new class loader with multiple parents.
|
MultipleParentClassLoader(ClassLoader parent,
List<? extends ClassLoader> parents,
boolean sealed)
Creates a new class loader with multiple parents.
|
MultipleParentClassLoader(List<? extends ClassLoader> parents)
Creates a new class loader with multiple parents.
|
Modifier and Type | Method and Description |
---|---|
protected Map<String,Class<?>> |
doDefineClasses(Map<String,byte[]> typeDefinitions)
Defines a group of types to be loaded by this class loader.
|
URL |
getResource(String name) |
Enumeration<URL> |
getResources(String name) |
protected Class<?> |
loadClass(String name,
boolean resolve) |
defineClass, defineClasses, isSealed, seal
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResourceAsStream, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
public MultipleParentClassLoader(List<? extends ClassLoader> parents)
parents
- The parents of this class loader in their application order. This list must not contain null
,
i.e. the bootstrap class loader which is an implicit parent of any class loader.public MultipleParentClassLoader(@MaybeNull ClassLoader parent, List<? extends ClassLoader> parents)
parent
- An explicit parent in compliance with the class loader API. This explicit parent should only be set if
the current platform does not allow creating a class loader that extends the bootstrap loader.parents
- The parents of this class loader in their application order. This list must not contain null
,
i.e. the bootstrap class loader which is an implicit parent of any class loader.public MultipleParentClassLoader(@MaybeNull ClassLoader parent, List<? extends ClassLoader> parents, boolean sealed)
parent
- An explicit parent in compliance with the class loader API. This explicit parent should only be set if
the current platform does not allow creating a class loader that extends the bootstrap loader.parents
- The parents of this class loader in their application order. This list must not contain null
,
i.e. the bootstrap class loader which is an implicit parent of any class loader.sealed
- true
if the class loader is sealed for injection of additional classes.protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
loadClass
in class ClassLoader
ClassNotFoundException
public URL getResource(String name)
getResource
in class ClassLoader
public Enumeration<URL> getResources(String name) throws IOException
getResources
in class ClassLoader
IOException
protected Map<String,Class<?>> doDefineClasses(Map<String,byte[]> typeDefinitions)
InjectionClassLoader
doDefineClasses
in class InjectionClassLoader
typeDefinitions
- The types binary representations.Copyright © 2014–2024. All rights reserved.