@HashCodeAndEqualsPlugin.Enhance public static class ClassInjector.UsingReflection extends ClassInjector.AbstractBase
Modifier and Type | Class and Description |
---|---|
protected static interface |
ClassInjector.UsingReflection.Dispatcher
A dispatcher for accessing a
ClassLoader reflectively. |
ClassInjector.AbstractBase, ClassInjector.UsingInstrumentation, ClassInjector.UsingLookup, ClassInjector.UsingReflection, ClassInjector.UsingUnsafe
Modifier and Type | Field and Description |
---|---|
private java.lang.ClassLoader |
classLoader
The class loader into which the classes are to be injected.
|
private static ClassInjector.UsingReflection.Dispatcher.Initializable |
DISPATCHER
The dispatcher to use for accessing a class loader via reflection.
|
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 queried for package definitions.
|
private java.security.ProtectionDomain |
protectionDomain
The protection domain that is used when loading classes.
|
ALLOW_EXISTING_TYPES, SUPPRESS_ACCESS_CHECKS
Constructor and Description |
---|
UsingReflection(java.lang.ClassLoader classLoader)
Creates a new injector for the given
ClassLoader and a default ProtectionDomain and a
trivial PackageDefinitionStrategy which does not trigger an error when discovering existent classes. |
UsingReflection(java.lang.ClassLoader classLoader,
java.security.ProtectionDomain protectionDomain)
Creates a new injector for the given
ClassLoader and a default PackageDefinitionStrategy where the
injection of existent classes does not trigger an error. |
UsingReflection(java.lang.ClassLoader classLoader,
java.security.ProtectionDomain protectionDomain,
PackageDefinitionStrategy packageDefinitionStrategy,
boolean forbidExisting)
Creates a new injector for the given
ClassLoader and ProtectionDomain . |
Modifier and Type | Method and Description |
---|---|
java.util.Map<java.lang.String,java.lang.Class<?>> |
injectRaw(java.util.Map<? extends java.lang.String,byte[]> types)
Injects the given types into the represented class loader using a mapping from name to binary representation.
|
boolean |
isAlive()
Indicates if this class injector is available on the current VM.
|
static boolean |
isAvailable()
Indicates if this class injection is available on the current VM.
|
static ClassInjector |
ofSystemClassLoader()
Creates a class injector for the system class loader.
|
inject
private static final ClassInjector.UsingReflection.Dispatcher.Initializable DISPATCHER
private final java.lang.ClassLoader classLoader
@HashCodeAndEqualsPlugin.ValueHandling(value=REVERSE_NULLABILITY) private final java.security.ProtectionDomain protectionDomain
private final PackageDefinitionStrategy packageDefinitionStrategy
private final boolean forbidExisting
public UsingReflection(java.lang.ClassLoader classLoader)
ClassLoader
and a default ProtectionDomain
and a
trivial PackageDefinitionStrategy
which does not trigger an error when discovering existent classes.classLoader
- The ClassLoader
into which new class definitions are to be injected. Must not be the bootstrap loader.public UsingReflection(java.lang.ClassLoader classLoader, java.security.ProtectionDomain protectionDomain)
ClassLoader
and a default PackageDefinitionStrategy
where the
injection of existent classes does not trigger an error.classLoader
- The ClassLoader
into which new class definitions are to be injected. Must not be the bootstrap loader.protectionDomain
- The protection domain to apply during class definition.public UsingReflection(java.lang.ClassLoader classLoader, java.security.ProtectionDomain protectionDomain, PackageDefinitionStrategy packageDefinitionStrategy, boolean forbidExisting)
ClassLoader
and ProtectionDomain
.classLoader
- The ClassLoader
into which new class definitions are to be injected.Must not be the bootstrap loader.protectionDomain
- The protection domain to apply during class definition.packageDefinitionStrategy
- The package definer to be queried for package definitions.forbidExisting
- Determines if an exception should be thrown when attempting to load a type that already exists.public boolean isAlive()
true
if this injector is available on the current VM.public java.util.Map<java.lang.String,java.lang.Class<?>> injectRaw(java.util.Map<? extends java.lang.String,byte[]> types)
types
- The types to load via injection.public static boolean isAvailable()
true
if this class injection is available.public static ClassInjector ofSystemClassLoader()