Package net.bytebuddy.dynamic.loading
Class ByteArrayClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- net.bytebuddy.dynamic.loading.InjectionClassLoader
-
- net.bytebuddy.dynamic.loading.ByteArrayClassLoader
-
- Direct Known Subclasses:
ByteArrayClassLoader.ChildFirst
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
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ByteArrayClassLoader.ChildFirst
AByteArrayClassLoader
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 theClassLoader.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.-
Nested classes/interfaces inherited from class net.bytebuddy.dynamic.loading.InjectionClassLoader
InjectionClassLoader.Strategy
-
-
Field Summary
Fields Modifier and Type Field 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.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.static java.lang.String
URL_SCHEMA
The schema for URLs that represent a class file of byte array class loaders.
-
Constructor Summary
Constructors Constructor Description 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, 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.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.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Class<?>
defineClass(java.lang.String name, byte[] binaryRepresentation)
Defines a new type to be loaded by this class loader.java.util.Map<java.lang.String,java.lang.Class<?>>
defineClasses(java.util.Map<java.lang.String,byte[]> typeDefinitions)
Defines a group of types to be loaded by this class loader.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, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy, boolean childFirst, boolean forbidExisting)
Loads a given set of class descriptions and their binary representations.static java.lang.ClassLoader
of(java.lang.ClassLoader parent, java.util.Map<TypeDescription,byte[]> typeDefinitions, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy, boolean childFirst)
Creates a new class loader for a given definition of classes.-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Field Detail
-
URL_SCHEMA
public static final java.lang.String URL_SCHEMA
The schema for URLs that represent a class file of byte array class loaders.- See Also:
- Constant Field Values
-
SYNCHRONIZATION_STRATEGY
protected static final ByteArrayClassLoader.SynchronizationStrategy.Initializable SYNCHRONIZATION_STRATEGY
The synchronization engine for the executing JVM.
-
typeDefinitions
protected final java.util.concurrent.ConcurrentMap<java.lang.String,byte[]> typeDefinitions
A mutable map of type names mapped to their binary representation.
-
persistenceHandler
protected final ByteArrayClassLoader.PersistenceHandler persistenceHandler
The persistence handler of this class loader.
-
protectionDomain
protected final java.security.ProtectionDomain protectionDomain
The protection domain to apply. Might benull
when referencing the default protection domain.
-
packageDefinitionStrategy
protected final PackageDefinitionStrategy packageDefinitionStrategy
The package definer to be queried for package definitions.
-
classFileTransformer
protected final java.lang.instrument.ClassFileTransformer classFileTransformer
The class file transformer to apply on loaded classes.
-
accessControlContext
protected final java.security.AccessControlContext accessControlContext
The access control context to use for loading classes.
-
-
Constructor Detail
-
ByteArrayClassLoader
public ByteArrayClassLoader(java.lang.ClassLoader parent, java.util.Map<java.lang.String,byte[]> typeDefinitions)
Creates a new class loader for a given definition of classes.- Parameters:
parent
- TheClassLoader
that is the parent of this class loader.typeDefinitions
- A map of fully qualified class names pointing to their binary representations.
-
ByteArrayClassLoader
public 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.- Parameters:
parent
- TheClassLoader
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.
-
ByteArrayClassLoader
public 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.- Parameters:
parent
- TheClassLoader
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 wherenull
references an implicit protection domain.packageDefinitionStrategy
- The package definer to be queried for package definitions.persistenceHandler
- The persistence handler of this class loader.
-
ByteArrayClassLoader
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)
Creates a new class loader for a given definition of classes.- Parameters:
parent
- TheClassLoader
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 wherenull
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.
-
-
Method Detail
-
of
public static java.lang.ClassLoader of(java.lang.ClassLoader parent, java.util.Map<TypeDescription,byte[]> typeDefinitions, java.security.ProtectionDomain protectionDomain, ByteArrayClassLoader.PersistenceHandler persistenceHandler, PackageDefinitionStrategy packageDefinitionStrategy, boolean childFirst)
Creates a new class loader for a given definition of classes.- Parameters:
parent
- TheClassLoader
that is the parent of this class loader.typeDefinitions
- A map of type descriptions pointing to their binary representations.protectionDomain
- The protection domain to apply wherenull
references an implicit protection domain.persistenceHandler
- The persistence handler to be used by the created class loader.packageDefinitionStrategy
- The package definer to be queried for package definitions.childFirst
-true
if the class loader should apply child first semantics when loading thetypeDefinitions
.- Returns:
- A corresponding class loader.
-
load
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 childFirst, boolean forbidExisting)
Loads a given set of class descriptions and their binary representations.- Parameters:
classLoader
- The parent class loader.types
- The unloaded types to be loaded.protectionDomain
- The protection domain to apply wherenull
references an implicit protection domain.persistenceHandler
- The persistence handler of the created class loader.packageDefinitionStrategy
- The package definer to be queried for package definitions.childFirst
-true
if the created class loader should apply child-first semantics when loading thetypes
.forbidExisting
-true
if the class loading should throw an exception if a class was already loaded by a parent class loader.- Returns:
- A map of the given type descriptions pointing to their loaded representations.
-
defineClass
public java.lang.Class<?> defineClass(java.lang.String name, byte[] binaryRepresentation) throws java.lang.ClassNotFoundException
Description copied from class:InjectionClassLoader
Defines a new type to be loaded by this class loader.- Specified by:
defineClass
in classInjectionClassLoader
- Parameters:
name
- The name of the type.binaryRepresentation
- The type's binary representation.- Returns:
- The defined class or a previously defined class.
- Throws:
java.lang.ClassNotFoundException
- If the class could not be loaded.
-
defineClasses
public java.util.Map<java.lang.String,java.lang.Class<?>> defineClasses(java.util.Map<java.lang.String,byte[]> typeDefinitions) throws java.lang.ClassNotFoundException
Description copied from class:InjectionClassLoader
Defines a group of types to be loaded by this class loader.- Specified by:
defineClasses
in classInjectionClassLoader
- Parameters:
typeDefinitions
- The types binary representations.- Returns:
- The mapping of defined classes or previously defined classes by their name.
- Throws:
java.lang.ClassNotFoundException
- If the class could not be loaded.
-
findClass
protected java.lang.Class<?> findClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Overrides:
findClass
in classjava.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
-
findResource
protected java.net.URL findResource(java.lang.String name)
- Overrides:
findResource
in classjava.lang.ClassLoader
-
findResources
protected java.util.Enumeration<java.net.URL> findResources(java.lang.String name)
- Overrides:
findResources
in classjava.lang.ClassLoader
-
-