@HashCodeAndEqualsPlugin.Enhance protected static class ClassLoadingStrategy.Default.InjectionDispatcher extends java.lang.Object implements ClassLoadingStrategy.Configurable<java.lang.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.
ClassLoadingStrategy.Configurable<S extends java.lang.ClassLoader>, ClassLoadingStrategy.Default, ClassLoadingStrategy.ForBootstrapInjection, ClassLoadingStrategy.ForUnsafeInjection, ClassLoadingStrategy.UsingLookup
Modifier and Type | Field and Description |
---|---|
private boolean |
forbidExisting
Determines if an exception should be thrown when attempting to load a type that already exists.
|
private PackageDefinitionStrategy |
packageDefinitionStrategy
The package definer to be used for querying information on package information.
|
private java.security.ProtectionDomain |
protectionDomain
The protection domain to apply or
null if no protection domain is set. |
BOOTSTRAP_LOADER, NO_PROTECTION_DOMAIN
Modifier | Constructor and Description |
---|---|
protected |
InjectionDispatcher()
Creates a new injection dispatcher.
|
private |
InjectionDispatcher(java.security.ProtectionDomain protectionDomain,
PackageDefinitionStrategy packageDefinitionStrategy,
boolean forbidExisting)
Creates a new injection dispatcher.
|
Modifier and Type | Method and Description |
---|---|
ClassLoadingStrategy.Configurable<java.lang.ClassLoader> |
allowExistingTypes()
Determines if this class loading strategy should not throw an exception when attempting to load a class that
was already loaded.
|
java.util.Map<TypeDescription,java.lang.Class<?>> |
load(java.lang.ClassLoader classLoader,
java.util.Map<TypeDescription,byte[]> types)
Loads a given collection of classes given their binary representation.
|
ClassLoadingStrategy.Configurable<java.lang.ClassLoader> |
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.
|
ClassLoadingStrategy.Configurable<java.lang.ClassLoader> |
with(PackageDefinitionStrategy packageDefinitionStrategy)
Defines the supplied package definition strategy to be used for defining packages.
|
ClassLoadingStrategy.Configurable<java.lang.ClassLoader> |
with(java.security.ProtectionDomain protectionDomain)
Overrides the implicitly set default
ProtectionDomain with an explicit one. |
@HashCodeAndEqualsPlugin.ValueHandling(value=REVERSE_NULLABILITY) private final java.security.ProtectionDomain protectionDomain
null
if no protection domain is set.private final PackageDefinitionStrategy packageDefinitionStrategy
private final boolean forbidExisting
protected InjectionDispatcher()
private InjectionDispatcher(java.security.ProtectionDomain protectionDomain, PackageDefinitionStrategy packageDefinitionStrategy, boolean forbidExisting)
protectionDomain
- The protection domain to apply or null
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.public java.util.Map<TypeDescription,java.lang.Class<?>> load(java.lang.ClassLoader classLoader, java.util.Map<TypeDescription,byte[]> types)
load
in interface ClassLoadingStrategy<java.lang.ClassLoader>
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.public ClassLoadingStrategy.Configurable<java.lang.ClassLoader> with(java.security.ProtectionDomain protectionDomain)
ProtectionDomain
with an explicit one.with
in interface ClassLoadingStrategy.Configurable<java.lang.ClassLoader>
protectionDomain
- The protection domain to apply or null
if no protection domain is set.ProtectionDomain
.public ClassLoadingStrategy.Configurable<java.lang.ClassLoader> with(PackageDefinitionStrategy packageDefinitionStrategy)
with
in interface ClassLoadingStrategy.Configurable<java.lang.ClassLoader>
packageDefinitionStrategy
- The package definer to be used.public ClassLoadingStrategy.Configurable<java.lang.ClassLoader> allowExistingTypes()
allowExistingTypes
in interface ClassLoadingStrategy.Configurable<java.lang.ClassLoader>
public ClassLoadingStrategy.Configurable<java.lang.ClassLoader> opened()
opened
in interface ClassLoadingStrategy.Configurable<java.lang.ClassLoader>