Package net.bytebuddy.dynamic.loading
Class ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride
- java.lang.Object
-
- net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride
-
- All Implemented Interfaces:
ClassInjector.UsingReflection.Dispatcher
,ClassInjector.UsingReflection.Dispatcher.Initializable
- Direct Known Subclasses:
ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride.ForJava7CapableVm
,ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride.ForLegacyVm
- Enclosing interface:
- ClassInjector.UsingReflection.Dispatcher
public abstract static class ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride extends java.lang.Object implements ClassInjector.UsingReflection.Dispatcher, ClassInjector.UsingReflection.Dispatcher.Initializable
A dispatcher implementation that usessun.misc.Unsafe#putBoolean
to set theAccessibleObject
field for making methods accessible.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride.ForJava7CapableVm
A resolved class dispatcher using unsafe field injection for a class injector on a VM running at least Java 7.protected static class
ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride.ForLegacyVm
A resolved class dispatcher using unsafe field injection for a class injector prior to Java 7.-
Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher
ClassInjector.UsingReflection.Dispatcher.CreationAction, ClassInjector.UsingReflection.Dispatcher.Direct, ClassInjector.UsingReflection.Dispatcher.Initializable, ClassInjector.UsingReflection.Dispatcher.Unavailable, ClassInjector.UsingReflection.Dispatcher.UsingUnsafeInjection, ClassInjector.UsingReflection.Dispatcher.UsingUnsafeOverride
-
Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher.Initializable
ClassInjector.UsingReflection.Dispatcher.Initializable.Unavailable
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.reflect.Method
defineClass
An instance ofClassLoader.defineClass(String, byte[], int, int, ProtectionDomain)
.protected java.lang.reflect.Method
definePackage
An instance ofClassLoader.definePackage(String, String, String, String, String, String, String, URL)
.protected java.lang.reflect.Method
findLoadedClass
An instance ofClassLoader.findLoadedClass(String)
.protected java.lang.reflect.Method
getDefinedPackage
An instance ofjava.lang.ClassLoader#getDefinedPackage(String)
.protected java.lang.reflect.Method
getPackage
An instance ofClassLoader.getPackage(String)
.-
Fields inherited from interface net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher
UNDEFINED
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
UsingUnsafeOverride(java.lang.reflect.Method findLoadedClass, java.lang.reflect.Method defineClass, java.lang.reflect.Method getDefinedPackage, java.lang.reflect.Method getPackage, java.lang.reflect.Method definePackage)
Creates a new unsafe field injecting injection dispatcher.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Class<?>
defineClass(java.lang.ClassLoader classLoader, java.lang.String name, byte[] binaryRepresentation, java.security.ProtectionDomain protectionDomain)
Defines a class for the given class loader.java.lang.Package
definePackage(java.lang.ClassLoader classLoader, java.lang.String name, java.lang.String specificationTitle, java.lang.String specificationVersion, java.lang.String specificationVendor, java.lang.String implementationTitle, java.lang.String implementationVersion, java.lang.String implementationVendor, java.net.URL sealBase)
Defines a package for the given class loader.java.lang.Class<?>
findClass(java.lang.ClassLoader classLoader, java.lang.String name)
Looks up a class from the given class loader.java.lang.Package
getDefinedPackage(java.lang.ClassLoader classLoader, java.lang.String name)
Looks up a package from a class loader.java.lang.Package
getPackage(java.lang.ClassLoader classLoader, java.lang.String name)
Looks up a package from a class loader or its ancestor.ClassInjector.UsingReflection.Dispatcher
initialize()
Initializes this dispatcher.boolean
isAvailable()
Indicates if this dispatcher is available.protected static ClassInjector.UsingReflection.Dispatcher.Initializable
make()
Creates a new initializable class injector using an unsafe field injection.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher
getClassLoadingLock
-
-
-
-
Field Detail
-
findLoadedClass
protected final java.lang.reflect.Method findLoadedClass
An instance ofClassLoader.findLoadedClass(String)
.
-
defineClass
protected final java.lang.reflect.Method defineClass
An instance ofClassLoader.defineClass(String, byte[], int, int, ProtectionDomain)
.
-
getDefinedPackage
protected final java.lang.reflect.Method getDefinedPackage
An instance ofjava.lang.ClassLoader#getDefinedPackage(String)
. May benull
.
-
getPackage
protected final java.lang.reflect.Method getPackage
An instance ofClassLoader.getPackage(String)
.
-
definePackage
protected final java.lang.reflect.Method definePackage
An instance ofClassLoader.definePackage(String, String, String, String, String, String, String, URL)
.
-
-
Constructor Detail
-
UsingUnsafeOverride
protected UsingUnsafeOverride(java.lang.reflect.Method findLoadedClass, java.lang.reflect.Method defineClass, java.lang.reflect.Method getDefinedPackage, java.lang.reflect.Method getPackage, java.lang.reflect.Method definePackage)
Creates a new unsafe field injecting injection dispatcher.- Parameters:
findLoadedClass
- An instance ofClassLoader.findLoadedClass(String)
.defineClass
- An instance ofClassLoader.defineClass(String, byte[], int, int, ProtectionDomain)
.getDefinedPackage
- An instance ofjava.lang.ClassLoader#getDefinedPackage(String)
. May benull
.getPackage
- An instance ofClassLoader.getPackage(String)
.definePackage
- An instance ofClassLoader.definePackage(String, String, String, String, String, String, String, URL)
.
-
-
Method Detail
-
make
protected static ClassInjector.UsingReflection.Dispatcher.Initializable make() throws java.lang.Exception
Creates a new initializable class injector using an unsafe field injection.- Returns:
- An appropriate initializable.
- Throws:
java.lang.Exception
- If the injector cannot be created.
-
isAvailable
public boolean isAvailable()
Indicates if this dispatcher is available.- Specified by:
isAvailable
in interfaceClassInjector.UsingReflection.Dispatcher.Initializable
- Returns:
true
if this dispatcher is available.
-
initialize
public ClassInjector.UsingReflection.Dispatcher initialize()
Initializes this dispatcher.- Specified by:
initialize
in interfaceClassInjector.UsingReflection.Dispatcher.Initializable
- Returns:
- The initialized dispatcher.
-
findClass
public java.lang.Class<?> findClass(java.lang.ClassLoader classLoader, java.lang.String name)
Looks up a class from the given class loader.- Specified by:
findClass
in interfaceClassInjector.UsingReflection.Dispatcher
- Parameters:
classLoader
- The class loader for which a class should be located.name
- The binary name of the class that should be located.- Returns:
- The class for the binary name or
null
if no such class is defined for the provided class loader.
-
defineClass
public java.lang.Class<?> defineClass(java.lang.ClassLoader classLoader, java.lang.String name, byte[] binaryRepresentation, java.security.ProtectionDomain protectionDomain)
Defines a class for the given class loader.- Specified by:
defineClass
in interfaceClassInjector.UsingReflection.Dispatcher
- Parameters:
classLoader
- The class loader for which a new class should be defined.name
- The binary name of the class that should be defined.binaryRepresentation
- The binary representation of the class.protectionDomain
- The protection domain for the defined class.- Returns:
- The defined, loaded class.
-
getDefinedPackage
public java.lang.Package getDefinedPackage(java.lang.ClassLoader classLoader, java.lang.String name)
Description copied from interface:ClassInjector.UsingReflection.Dispatcher
Looks up a package from a class loader. If the operation is not supported, falls back toClassInjector.UsingReflection.Dispatcher.getPackage(ClassLoader, String)
- Specified by:
getDefinedPackage
in interfaceClassInjector.UsingReflection.Dispatcher
- Parameters:
classLoader
- The class loader to query.name
- The binary name of the package.- Returns:
- The package for the given name as defined by the provided class loader or
null
if no such package exists.
-
getPackage
public java.lang.Package getPackage(java.lang.ClassLoader classLoader, java.lang.String name)
Looks up a package from a class loader or its ancestor.- Specified by:
getPackage
in interfaceClassInjector.UsingReflection.Dispatcher
- Parameters:
classLoader
- The class loader to query.name
- The binary name of the package.- Returns:
- The package for the given name as defined by the provided class loader or its ancestor, or
null
if no such package exists.
-
definePackage
public java.lang.Package definePackage(java.lang.ClassLoader classLoader, java.lang.String name, java.lang.String specificationTitle, java.lang.String specificationVersion, java.lang.String specificationVendor, java.lang.String implementationTitle, java.lang.String implementationVersion, java.lang.String implementationVendor, java.net.URL sealBase)
Defines a package for the given class loader.- Specified by:
definePackage
in interfaceClassInjector.UsingReflection.Dispatcher
- Parameters:
classLoader
- The class loader for which a package is to be defined.name
- The binary name of the package.specificationTitle
- The specification title of the package ornull
if no specification title exists.specificationVersion
- The specification version of the package ornull
if no specification version exists.specificationVendor
- The specification vendor of the package ornull
if no specification vendor exists.implementationTitle
- The implementation title of the package ornull
if no implementation title exists.implementationVersion
- The implementation version of the package ornull
if no implementation version exists.implementationVendor
- The implementation vendor of the package ornull
if no implementation vendor exists.sealBase
- The seal base URL ornull
if the package should not be sealed.- Returns:
- The defined package.
-
-