Package net.bytebuddy.dynamic.loading
Class ClassInjector.UsingUnsafe
java.lang.Object
net.bytebuddy.dynamic.loading.ClassInjector.AbstractBase
net.bytebuddy.dynamic.loading.ClassInjector.UsingUnsafe
- All Implemented Interfaces:
ClassInjector
- Enclosing interface:
ClassInjector
A class injector that uses
sun.misc.Unsafe
or jdk.internal.misc.Unsafe
to inject classes.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static interface
A dispatcher for usingsun.misc.Unsafe
orjdk.internal.misc.Unsafe
.static class
A factory for creating aClassInjector
that usessun.misc.Unsafe
if available but attempts a fallback to usingjdk.internal.misc.Unsafe
if thejdk.internal
module is not resolved or unavailable.protected static interface
A proxy ofjava.lang.System
.Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.loading.ClassInjector
ClassInjector.AbstractBase, ClassInjector.UsingInstrumentation, ClassInjector.UsingJna, ClassInjector.UsingLookup, ClassInjector.UsingReflection, ClassInjector.UsingUnsafe
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final Object
A lock for the bootstrap loader when injecting.private static final Method
Thejava.lang.SecurityManager#checkPermission
method ornull
if not available.private final ClassLoader
The class loader to inject classes into ornull
for the bootstrap loader.private final ClassInjector.UsingUnsafe.Dispatcher.Initializable
The dispatcher to use.private static final ClassInjector.UsingUnsafe.Dispatcher.Initializable
The dispatcher to use.private final ProtectionDomain
The protection domain to use ornull
for no protection domain.static final String
If this property is set, Byte Buddy does not make use of anyUnsafe
class.private static final ClassInjector.UsingUnsafe.System
A proxy forjava.lang.System
to access the security manager if available.Fields inherited from interface net.bytebuddy.dynamic.loading.ClassInjector
ALLOW_EXISTING_TYPES, SUPPRESS_ACCESS_CHECKS
-
Constructor Summary
ConstructorsModifierConstructorDescriptionUsingUnsafe
(ClassLoader classLoader) Creates a new unsafe injector for the given class loader with a default protection domain.UsingUnsafe
(ClassLoader classLoader, ProtectionDomain protectionDomain) Creates a new unsafe injector for the given class loader with a default protection domain.protected
UsingUnsafe
(ClassLoader classLoader, ProtectionDomain protectionDomain, ClassInjector.UsingUnsafe.Dispatcher.Initializable dispatcher) Creates a new unsafe injector for the given class loader with a default protection domain. -
Method Summary
Modifier and TypeMethodDescriptionprivate static <T> T
doPrivileged
(PrivilegedAction<T> action) A proxy forjava.security.AccessController#doPrivileged
that is activated if available.injectRaw
(Set<String> names, ClassFileLocator classFileLocator) Injects the given types into the represented class loader.boolean
isAlive()
Indicates if this class injector is available on the current VM.static boolean
Checks if unsafe class injection is available on the current VM.static ClassInjector
Returns an unsafe class injector for the boot class loader.static ClassInjector
Returns an unsafe class injector for the platform class loader.static ClassInjector
Returns an unsafe class injector for the system class loader.Methods inherited from class net.bytebuddy.dynamic.loading.ClassInjector.AbstractBase
inject, inject, injectRaw
-
Field Details
-
SAFE_PROPERTY
If this property is set, Byte Buddy does not make use of anyUnsafe
class.- See Also:
-
DISPATCHER
The dispatcher to use. -
SYSTEM
A proxy forjava.lang.System
to access the security manager if available. -
CHECK_PERMISSION
Thejava.lang.SecurityManager#checkPermission
method ornull
if not available. -
BOOTSTRAP_LOADER_LOCK
A lock for the bootstrap loader when injecting. -
classLoader
The class loader to inject classes into ornull
for the bootstrap loader. -
protectionDomain
The protection domain to use ornull
for no protection domain. -
dispatcher
The dispatcher to use.
-
-
Constructor Details
-
UsingUnsafe
Creates a new unsafe injector for the given class loader with a default protection domain.- Parameters:
classLoader
- The class loader to inject classes into ornull
for the bootstrap loader.
-
UsingUnsafe
public UsingUnsafe(@MaybeNull ClassLoader classLoader, @MaybeNull ProtectionDomain protectionDomain) Creates a new unsafe injector for the given class loader with a default protection domain.- Parameters:
classLoader
- The class loader to inject classes into ornull
for the bootstrap loader.protectionDomain
- The protection domain to use ornull
for no protection domain.
-
UsingUnsafe
protected UsingUnsafe(@MaybeNull ClassLoader classLoader, @MaybeNull ProtectionDomain protectionDomain, ClassInjector.UsingUnsafe.Dispatcher.Initializable dispatcher) Creates a new unsafe injector for the given class loader with a default protection domain.- Parameters:
classLoader
- The class loader to inject classes into ornull
for the bootstrap loader.protectionDomain
- The protection domain to use ornull
for no protection domain.dispatcher
- The dispatcher to use.
-
-
Method Details
-
doPrivileged
A proxy forjava.security.AccessController#doPrivileged
that is activated if available.- Type Parameters:
T
- The type of the action's resolved value.- Parameters:
action
- The action to execute from a privileged context.- Returns:
- The action's resolved value.
-
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
Injects the given types into the represented class loader.- Parameters:
names
- The names of the types to load via injection.classFileLocator
- The class file locator to use for resolving binary representations.- Returns:
- The loaded types that were passed as arguments.
-
isAvailable
public static boolean isAvailable()Checks if unsafe class injection is available on the current VM.- Returns:
true
if unsafe class injection is available on the current VM.
-
ofSystemLoader
Returns an unsafe class injector for the system class loader.- Returns:
- A class injector for the system class loader.
-
ofPlatformLoader
Returns an unsafe class injector for the platform class loader. For VMs of version 8 or older, the extension class loader is represented instead.- Returns:
- A class injector for the platform class loader.
-
ofBootLoader
Returns an unsafe class injector for the boot class loader.- Returns:
- A class injector for the boot loader.
-