public class ByteArrayClassLoader extends InjectionClassLoader
A ClassLoader
that is capable of loading explicitly defined classes. The class loader will free
any binary resources once a class that is defined by its binary data is loaded. This class loader is thread safe since
the class loading mechanics are only called from synchronized context.
Note: Instances of this class loader return URLs for their represented class loaders with the bytebuddy schema. These URLs do not represent URIs as two classes with the same name yield identical URLs but might represents different byte arrays.
Note: Any class and package definition is performed using the creator's AccessControlContext
.
Modifier and Type | Class and Description |
---|---|
static class |
ByteArrayClassLoader.ChildFirst
A
ByteArrayClassLoader which applies child-first semantics for the
given type definitions. |
protected class |
ByteArrayClassLoader.ClassDefinitionAction
An action for defining a located class that is not yet loaded.
|
protected static class |
ByteArrayClassLoader.EmptyEnumeration
An enumeration without any elements.
|
protected static interface |
ByteArrayClassLoader.PackageLookupStrategy
A package lookup strategy for locating a package by name.
|
static class |
ByteArrayClassLoader.PersistenceHandler
A persistence handler decides on whether the byte array that represents a loaded class is exposed by
the
ClassLoader.getResourceAsStream(String) method. |
protected static class |
ByteArrayClassLoader.SingletonEnumeration
An enumeration that contains a single element.
|
protected static interface |
ByteArrayClassLoader.SynchronizationStrategy
An engine for receiving a class loading lock when loading a class.
|
InjectionClassLoader.Strategy
Modifier and Type | Field and Description |
---|---|
protected java.security.AccessControlContext |
accessControlContext
The access control context to use for loading classes.
|
protected java.lang.instrument.ClassFileTransformer |
classFileTransformer
The class file transformer to apply on loaded classes.
|
private static int |
FROM_BEGINNING
Indicates that an array should be included from its first index.
|
private static java.net.URL |
NO_URL
Indicates that a URL does not exist to improve code readability.
|
private static ByteArrayClassLoader.PackageLookupStrategy |
PACKAGE_LOOKUP_STRATEGY
A strategy for locating a package by name.
|
protected PackageDefinitionStrategy |
packageDefinitionStrategy
The package definer to be queried for package definitions.
|
protected ByteArrayClassLoader.PersistenceHandler |
persistenceHandler
The persistence handler of this class loader.
|
protected java.security.ProtectionDomain |
protectionDomain
The protection domain to apply.
|
protected static ByteArrayClassLoader.SynchronizationStrategy.Initializable |
SYNCHRONIZATION_STRATEGY
The synchronization engine for the executing JVM.
|
protected java.util.concurrent.ConcurrentMap<java.lang.String,byte[]> |
typeDefinitions
A mutable map of type names mapped to their binary representation.
|
private static java.lang.Class<?> |
UNLOADED_TYPE
Indicates a type that is not loaded.
|
static java.lang.String |
URL_SCHEMA
The schema for URLs that represent a class file of byte array class loaders.
|
Constructor and Description |
---|
ByteArrayClassLoader(java.lang.ClassLoader parent,
boolean sealed,
java.util.Map<java.lang.String,byte[]> typeDefinitions)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
boolean sealed,
java.util.Map<java.lang.String,byte[]> typeDefinitions,
ByteArrayClassLoader.PersistenceHandler persistenceHandler)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
boolean sealed,
java.util.Map<java.lang.String,byte[]> typeDefinitions,
java.security.ProtectionDomain protectionDomain,
ByteArrayClassLoader.PersistenceHandler persistenceHandler,
PackageDefinitionStrategy packageDefinitionStrategy)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
boolean sealed,
java.util.Map<java.lang.String,byte[]> typeDefinitions,
java.security.ProtectionDomain protectionDomain,
ByteArrayClassLoader.PersistenceHandler persistenceHandler,
PackageDefinitionStrategy packageDefinitionStrategy,
java.lang.instrument.ClassFileTransformer classFileTransformer)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
java.util.Map<java.lang.String,byte[]> typeDefinitions)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
java.util.Map<java.lang.String,byte[]> typeDefinitions,
ByteArrayClassLoader.PersistenceHandler persistenceHandler)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
java.util.Map<java.lang.String,byte[]> typeDefinitions,
java.security.ProtectionDomain protectionDomain,
ByteArrayClassLoader.PersistenceHandler persistenceHandler,
PackageDefinitionStrategy packageDefinitionStrategy)
Creates a new class loader for a given definition of classes.
|
ByteArrayClassLoader(java.lang.ClassLoader parent,
java.util.Map<java.lang.String,byte[]> typeDefinitions,
java.security.ProtectionDomain protectionDomain,
ByteArrayClassLoader.PersistenceHandler persistenceHandler,
PackageDefinitionStrategy packageDefinitionStrategy,
java.lang.instrument.ClassFileTransformer classFileTransformer)
Creates a new class loader for a given definition of classes.
|
Modifier and Type | Method and Description |
---|---|
protected java.util.Map<java.lang.String,java.lang.Class<?>> |
doDefineClasses(java.util.Map<java.lang.String,byte[]> typeDefinitions)
Defines a group of types to be loaded by this class loader.
|
private java.lang.Package |
doGetPackage(java.lang.String name)
Returns the package for a given name.
|
protected java.lang.Class<?> |
findClass(java.lang.String name) |
protected java.net.URL |
findResource(java.lang.String name) |
protected java.util.Enumeration<java.net.URL> |
findResources(java.lang.String name) |
static java.util.Map<TypeDescription,java.lang.Class<?>> |
load(java.lang.ClassLoader classLoader,
java.util.Map<TypeDescription,byte[]> types)
Loads a given set of class descriptions and their binary representations.
|
static java.util.Map<TypeDescription,java.lang.Class<?>> |
load(java.lang.ClassLoader classLoader,
java.util.Map<TypeDescription,byte[]> types,
java.security.ProtectionDomain protectionDomain,
ByteArrayClassLoader.PersistenceHandler persistenceHandler,
PackageDefinitionStrategy packageDefinitionStrategy,
boolean forbidExisting,
boolean sealed)
Loads a given set of class descriptions and their binary representations.
|
private static java.lang.Object |
methodHandle()
Resolves a method handle in the scope of the
ByteArrayClassLoader class. |
defineClass, defineClasses, isSealed
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
public static final java.lang.String URL_SCHEMA
private static final int FROM_BEGINNING
private static final java.lang.Class<?> UNLOADED_TYPE
private static final java.net.URL NO_URL
private static final ByteArrayClassLoader.PackageLookupStrategy PACKAGE_LOOKUP_STRATEGY
protected static final ByteArrayClassLoader.SynchronizationStrategy.Initializable SYNCHRONIZATION_STRATEGY
protected final java.util.concurrent.ConcurrentMap<java.lang.String,byte[]> typeDefinitions
protected final ByteArrayClassLoader.PersistenceHandler persistenceHandler
protected final java.security.ProtectionDomain protectionDomain
null
when referencing the default protection domain.protected final PackageDefinitionStrategy packageDefinitionStrategy
protected final java.lang.instrument.ClassFileTransformer classFileTransformer
protected final java.security.AccessControlContext accessControlContext
public ByteArrayClassLoader(java.lang.ClassLoader parent, java.util.Map<java.lang.String,byte[]> typeDefinitions)
parent
- The ClassLoader
that is the parent of this class loader.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.public ByteArrayClassLoader(java.lang.ClassLoader parent, boolean sealed, java.util.Map<java.lang.String,byte[]> typeDefinitions)
parent
- The ClassLoader
that is the parent of this class loader.sealed
- true
if this class loader is sealed.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.public ByteArrayClassLoader(java.lang.ClassLoader parent, java.util.Map<java.lang.String,byte[]> typeDefinitions, ByteArrayClassLoader.PersistenceHandler persistenceHandler)
parent
- The ClassLoader
that is the parent of this class loader.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.persistenceHandler
- The persistence handler of this class loader.public ByteArrayClassLoader(java.lang.ClassLoader parent, boolean sealed, java.util.Map<java.lang.String,byte[]> typeDefinitions, ByteArrayClassLoader.PersistenceHandler persistenceHandler)
parent
- The ClassLoader
that is the parent of this class loader.sealed
- true
if this class loader is sealed.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.persistenceHandler
- The persistence handler of this class loader.public ByteArrayClassLoader(java.lang.ClassLoader parent, java.util.Map<java.lang.String,byte[]> typeDefinitions, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy)
parent
- The ClassLoader
that is the parent of this class loader.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.protectionDomain
- The protection domain to apply where null
references an implicit protection domain.packageDefinitionStrategy
- The package definer to be queried for package definitions.persistenceHandler
- The persistence handler of this class loader.public ByteArrayClassLoader(java.lang.ClassLoader parent, boolean sealed, java.util.Map<java.lang.String,byte[]> typeDefinitions, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy)
parent
- The ClassLoader
that is the parent of this class loader.sealed
- true
if this class loader is sealed.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.protectionDomain
- The protection domain to apply where null
references an implicit protection domain.packageDefinitionStrategy
- The package definer to be queried for package definitions.persistenceHandler
- The persistence handler of this class loader.public ByteArrayClassLoader(java.lang.ClassLoader parent, java.util.Map<java.lang.String,byte[]> typeDefinitions, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy, java.lang.instrument.ClassFileTransformer classFileTransformer)
parent
- The ClassLoader
that is the parent of this class loader.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.protectionDomain
- The protection domain to apply where null
references an implicit protection domain.packageDefinitionStrategy
- The package definer to be queried for package definitions.persistenceHandler
- The persistence handler of this class loader.classFileTransformer
- The class file transformer to apply on loaded classes.public ByteArrayClassLoader(java.lang.ClassLoader parent, boolean sealed, java.util.Map<java.lang.String,byte[]> typeDefinitions, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy, java.lang.instrument.ClassFileTransformer classFileTransformer)
parent
- The ClassLoader
that is the parent of this class loader.sealed
- true
if this class loader is sealed.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.protectionDomain
- The protection domain to apply where null
references an implicit protection domain.packageDefinitionStrategy
- The package definer to be queried for package definitions.persistenceHandler
- The persistence handler of this class loader.classFileTransformer
- The class file transformer to apply on loaded classes.private static java.lang.Object methodHandle() throws java.lang.Exception
ByteArrayClassLoader
class.java.lang.Exception
- If the method handle facility is not supported by the current virtual machine.public static java.util.Map<TypeDescription,java.lang.Class<?>> load(java.lang.ClassLoader classLoader, java.util.Map<TypeDescription,byte[]> types)
classLoader
- The parent class loader.types
- The unloaded types to be loaded.public static java.util.Map<TypeDescription,java.lang.Class<?>> load(java.lang.ClassLoader classLoader, java.util.Map<TypeDescription,byte[]> types, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy, boolean forbidExisting, boolean sealed)
classLoader
- The parent class loader.types
- The unloaded types to be loaded.protectionDomain
- The protection domain to apply where null
references an implicit protection domain.persistenceHandler
- The persistence handler of the created class loader.packageDefinitionStrategy
- The package definer to be queried for package definitions.forbidExisting
- true
if the class loading should throw an exception if a class was already loaded by a parent class loader.sealed
- true
if the class loader should be sealed.protected java.util.Map<java.lang.String,java.lang.Class<?>> doDefineClasses(java.util.Map<java.lang.String,byte[]> typeDefinitions) throws java.lang.ClassNotFoundException
InjectionClassLoader
doDefineClasses
in class InjectionClassLoader
typeDefinitions
- The types binary representations.java.lang.ClassNotFoundException
- If the class could not be loaded.protected java.lang.Class<?> findClass(java.lang.String name) throws java.lang.ClassNotFoundException
findClass
in class java.lang.ClassLoader
java.lang.ClassNotFoundException
protected java.net.URL findResource(java.lang.String name)
findResource
in class java.lang.ClassLoader
protected java.util.Enumeration<java.net.URL> findResources(java.lang.String name)
findResources
in class java.lang.ClassLoader
private java.lang.Package doGetPackage(java.lang.String name)
name
- The name of the package.null
if no such package exists.