Package net.bytebuddy.dynamic.loading
Class ClassInjector.UsingReflection
- java.lang.Object
-
- net.bytebuddy.dynamic.loading.ClassInjector.AbstractBase
-
- net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection
-
- All Implemented Interfaces:
ClassInjector
- Enclosing interface:
- ClassInjector
@Enhance public static class ClassInjector.UsingReflection extends ClassInjector.AbstractBase
A class injector that uses reflective method calls.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
ClassInjector.UsingReflection.Dispatcher
A dispatcher for accessing aClassLoader
reflectively.-
Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.loading.ClassInjector
ClassInjector.AbstractBase, ClassInjector.UsingInstrumentation, ClassInjector.UsingLookup, ClassInjector.UsingReflection, ClassInjector.UsingUnsafe
-
-
Field Summary
Fields Modifier and Type Field 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.-
Fields inherited from interface net.bytebuddy.dynamic.loading.ClassInjector
ALLOW_EXISTING_TYPES, SUPPRESS_ACCESS_CHECKS
-
-
Constructor Summary
Constructors Constructor Description UsingReflection(java.lang.ClassLoader classLoader)
Creates a new injector for the givenClassLoader
and a defaultProtectionDomain
and a trivialPackageDefinitionStrategy
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 givenClassLoader
and a defaultPackageDefinitionStrategy
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 givenClassLoader
andProtectionDomain
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method 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.-
Methods inherited from class net.bytebuddy.dynamic.loading.ClassInjector.AbstractBase
inject
-
-
-
-
Field Detail
-
DISPATCHER
private static final ClassInjector.UsingReflection.Dispatcher.Initializable DISPATCHER
The dispatcher to use for accessing a class loader via reflection.
-
classLoader
private final java.lang.ClassLoader classLoader
The class loader into which the classes are to be injected.
-
protectionDomain
@ValueHandling(REVERSE_NULLABILITY) private final java.security.ProtectionDomain protectionDomain
The protection domain that is used when loading classes.
-
packageDefinitionStrategy
private final PackageDefinitionStrategy packageDefinitionStrategy
The package definer to be queried for package definitions.
-
forbidExisting
private final boolean forbidExisting
Determines if an exception should be thrown when attempting to load a type that already exists.
-
-
Constructor Detail
-
UsingReflection
public UsingReflection(java.lang.ClassLoader classLoader)
Creates a new injector for the givenClassLoader
and a defaultProtectionDomain
and a trivialPackageDefinitionStrategy
which does not trigger an error when discovering existent classes.- Parameters:
classLoader
- TheClassLoader
into which new class definitions are to be injected. Must not be the bootstrap loader.
-
UsingReflection
public UsingReflection(java.lang.ClassLoader classLoader, java.security.ProtectionDomain protectionDomain)
Creates a new injector for the givenClassLoader
and a defaultPackageDefinitionStrategy
where the injection of existent classes does not trigger an error.- Parameters:
classLoader
- TheClassLoader
into which new class definitions are to be injected. Must not be the bootstrap loader.protectionDomain
- The protection domain to apply during class definition.
-
UsingReflection
public UsingReflection(java.lang.ClassLoader classLoader, java.security.ProtectionDomain protectionDomain, PackageDefinitionStrategy packageDefinitionStrategy, boolean forbidExisting)
Creates a new injector for the givenClassLoader
andProtectionDomain
.- Parameters:
classLoader
- TheClassLoader
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.
-
-
Method Detail
-
isAlive
public boolean isAlive()
Indicates if this class injector is available on the current VM.- Returns:
true
if this injector is available on the current VM.
-
injectRaw
public 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.- Parameters:
types
- The types to load via injection.- Returns:
- The loaded types that were passed as arguments.
-
isAvailable
public static boolean isAvailable()
Indicates if this class injection is available on the current VM.- Returns:
true
if this class injection is available.
-
ofSystemClassLoader
public static ClassInjector ofSystemClassLoader()
Creates a class injector for the system class loader.- Returns:
- A class injector for the system class loader.
-
-