Package net.bytebuddy.dynamic.loading
Class ClassLoadingStrategy.Default.InjectionDispatcher
java.lang.Object
net.bytebuddy.dynamic.loading.ClassLoadingStrategy.Default.InjectionDispatcher
- All Implemented Interfaces:
ClassLoadingStrategy<ClassLoader>
,ClassLoadingStrategy.Configurable<ClassLoader>
- Enclosing class:
- ClassLoadingStrategy.Default
@Enhance
protected static class ClassLoadingStrategy.Default.InjectionDispatcher
extends Object
implements ClassLoadingStrategy.Configurable<ClassLoader>
A class loading strategy which applies a class loader injection while applying a given ProtectionDomain
on class injection.
Important: Class injection requires access to JVM internal methods that are sealed by security managers and the Java Platform module system. Since Java 11, access to these methods is no longer feasible unless those packages are explicitly opened.
-
Nested Class Summary
Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.loading.ClassLoadingStrategy
ClassLoadingStrategy.Configurable<S extends ClassLoader>, ClassLoadingStrategy.Default, ClassLoadingStrategy.ForBootstrapInjection, ClassLoadingStrategy.ForJnaInjection, ClassLoadingStrategy.ForUnsafeInjection, ClassLoadingStrategy.UsingLookup
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final boolean
Determines if an exception should be thrown when attempting to load a type that already exists.private final PackageDefinitionStrategy
The package definer to be used for querying information on package information.private final ProtectionDomain
The protection domain to apply ornull
if no protection domain is set.Fields inherited from interface net.bytebuddy.dynamic.loading.ClassLoadingStrategy
BOOTSTRAP_LOADER, NO_PROTECTION_DOMAIN
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Creates a new injection dispatcher.private
InjectionDispatcher
(ProtectionDomain protectionDomain, PackageDefinitionStrategy packageDefinitionStrategy, boolean forbidExisting) Creates a new injection dispatcher. -
Method Summary
Modifier and TypeMethodDescriptionDetermines if this class loading strategy should not throw an exception when attempting to load a class that was already loaded.Map<TypeDescription,
Class<?>> load
(ClassLoader classLoader, Map<TypeDescription, byte[]> types) Loads a given collection of classes given their binary representation.opened()
With an opened class loading strategy, it is assured that types can be added to the class loader, either by indirect injection using this strategy or by creating a class loader that explicitly supports injection.with
(ProtectionDomain protectionDomain) Overrides the implicitly set defaultProtectionDomain
with an explicit one.with
(PackageDefinitionStrategy packageDefinitionStrategy) Defines the supplied package definition strategy to be used for defining packages.
-
Field Details
-
protectionDomain
The protection domain to apply ornull
if no protection domain is set. -
packageDefinitionStrategy
The package definer to be used for querying information on package information. -
forbidExisting
private final boolean forbidExistingDetermines if an exception should be thrown when attempting to load a type that already exists.
-
-
Constructor Details
-
InjectionDispatcher
protected InjectionDispatcher()Creates a new injection dispatcher. -
InjectionDispatcher
private InjectionDispatcher(@MaybeNull ProtectionDomain protectionDomain, PackageDefinitionStrategy packageDefinitionStrategy, boolean forbidExisting) Creates a new injection dispatcher.- Parameters:
protectionDomain
- The protection domain to apply ornull
if no protection domain is set.packageDefinitionStrategy
- The package definer to be used for querying information on package information.forbidExisting
- Determines if an exception should be thrown when attempting to load a type that already exists.
-
-
Method Details
-
load
public Map<TypeDescription,Class<?>> load(@MaybeNull ClassLoader classLoader, Map<TypeDescription, byte[]> types) Loads a given collection of classes given their binary representation.- Specified by:
load
in interfaceClassLoadingStrategy<ClassLoader>
- Parameters:
classLoader
- The class loader to used for loading the classes.types
- Byte array representations of the types to be loaded mapped by their descriptions, where an iteration order defines an order in which they are supposed to be loaded, if relevant.- Returns:
- A collection of the loaded classes which will be initialized in the iteration order of the returned collection.
-
with
Overrides the implicitly set defaultProtectionDomain
with an explicit one.- Specified by:
with
in interfaceClassLoadingStrategy.Configurable<ClassLoader>
- Parameters:
protectionDomain
- The protection domain to apply ornull
if no protection domain is set.- Returns:
- This class loading strategy with an explicitly set
ProtectionDomain
.
-
with
public ClassLoadingStrategy.Configurable<ClassLoader> with(PackageDefinitionStrategy packageDefinitionStrategy) Defines the supplied package definition strategy to be used for defining packages.- Specified by:
with
in interfaceClassLoadingStrategy.Configurable<ClassLoader>
- Parameters:
packageDefinitionStrategy
- The package definer to be used.- Returns:
- A version of this class loading strategy that applies the supplied package definition strategy.
-
allowExistingTypes
Determines if this class loading strategy should not throw an exception when attempting to load a class that was already loaded. In this case, the already loaded class is used instead of the generated class.- Specified by:
allowExistingTypes
in interfaceClassLoadingStrategy.Configurable<ClassLoader>
- Returns:
- A version of this class loading strategy that does not throw an exception when a class is already loaded.
-
opened
With an opened class loading strategy, it is assured that types can be added to the class loader, either by indirect injection using this strategy or by creating a class loader that explicitly supports injection.- Specified by:
opened
in interfaceClassLoadingStrategy.Configurable<ClassLoader>
- Returns:
- A version of this class loading strategy that opens for future injections into a class loader.
-