Package net.bytebuddy.dynamic.loading
Class ClassInjector.UsingReflection.Dispatcher.UsingUnsafeInjection
java.lang.Object
net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher.UsingUnsafeInjection
- All Implemented Interfaces:
ClassInjector.UsingReflection.Dispatcher
,ClassInjector.UsingReflection.Dispatcher.Initializable
- Enclosing interface:
ClassInjector.UsingReflection.Dispatcher
@Enhance
public static class ClassInjector.UsingReflection.Dispatcher.UsingUnsafeInjection
extends Object
implements ClassInjector.UsingReflection.Dispatcher, ClassInjector.UsingReflection.Dispatcher.Initializable
An indirect dispatcher that uses a redirection accessor class that was injected into the bootstrap class loader.
-
Nested Class Summary
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
FieldsModifier and TypeFieldDescriptionprivate final Object
An instance of the accessor class that is required for using it's intentionally non-static methods.private final Method
The accessor method for usingClassLoader.defineClass(String, byte[], int, int, ProtectionDomain)
.private final Method
The accessor method for usingClassLoader.definePackage(String, String, String, String, String, String, String, URL)
.private final Method
The accessor method for usingClassLoader.findLoadedClass(String)
.private final Method
The accessor method for usingClassLoader#getClassLoadingLock(String)
or returning the suppliedClassLoader
if this method does not exist on the current VM.private final Method
The accessor method for usingjava.lang.ClassLoader#getDefinedPackage(String)
.private final Method
The accessor method for usingClassLoader.getPackage(String)
.Fields inherited from interface net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher
UNDEFINED
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
UsingUnsafeInjection
(Object accessor, Method findLoadedClass, Method defineClass, Method getDefinedPackage, Method getPackage, Method definePackage, Method getClassLoadingLock) Creates a new class loading injection dispatcher using an unsafe injected dispatcher. -
Method Summary
Modifier and TypeMethodDescriptionClass
<?> defineClass
(ClassLoader classLoader, String name, byte[] binaryRepresentation, ProtectionDomain protectionDomain) Defines a class for the given class loader.definePackage
(ClassLoader classLoader, String name, String specificationTitle, String specificationVersion, String specificationVendor, String implementationTitle, String implementationVersion, String implementationVendor, URL sealBase) Defines a package for the given class loader.Class
<?> findClass
(ClassLoader classLoader, String name) Looks up a class from the given class loader.getClassLoadingLock
(ClassLoader classLoader, String name) Returns the lock for loading the specified class.getDefinedPackage
(ClassLoader classLoader, String name) Looks up a package from a class loader.getPackage
(ClassLoader classLoader, String name) Looks up a package from a class loader or its ancestor.Initializes this dispatcher.boolean
Indicates if this dispatcher is available.protected static ClassInjector.UsingReflection.Dispatcher.Initializable
make()
Creates an indirect dispatcher.
-
Field Details
-
accessor
An instance of the accessor class that is required for using it's intentionally non-static methods. -
findLoadedClass
The accessor method for usingClassLoader.findLoadedClass(String)
. -
defineClass
The accessor method for usingClassLoader.defineClass(String, byte[], int, int, ProtectionDomain)
. -
getDefinedPackage
The accessor method for usingjava.lang.ClassLoader#getDefinedPackage(String)
. May benull
. -
getPackage
The accessor method for usingClassLoader.getPackage(String)
. -
definePackage
The accessor method for usingClassLoader.definePackage(String, String, String, String, String, String, String, URL)
. -
getClassLoadingLock
The accessor method for usingClassLoader#getClassLoadingLock(String)
or returning the suppliedClassLoader
if this method does not exist on the current VM.
-
-
Constructor Details
-
UsingUnsafeInjection
protected UsingUnsafeInjection(Object accessor, Method findLoadedClass, Method defineClass, @MaybeNull Method getDefinedPackage, Method getPackage, Method definePackage, Method getClassLoadingLock) Creates a new class loading injection dispatcher using an unsafe injected dispatcher.- Parameters:
accessor
- An instance of the accessor class that is required for using it's intentionally non-static methods.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)
.getClassLoadingLock
- The accessor method for usingClassLoader#getClassLoadingLock(String)
or returning the suppliedClassLoader
if this method does not exist on the current VM.
-
-
Method Details
-
make
Creates an indirect dispatcher.- Returns:
- An indirect dispatcher for class creation.
- Throws:
Exception
- If the dispatcher 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
Initializes this dispatcher.- Specified by:
initialize
in interfaceClassInjector.UsingReflection.Dispatcher.Initializable
- Returns:
- The initialized dispatcher.
-
getClassLoadingLock
Returns the lock for loading the specified class.- Specified by:
getClassLoadingLock
in interfaceClassInjector.UsingReflection.Dispatcher
- Parameters:
classLoader
- the class loader to inject the class into.name
- The name of the class.- Returns:
- The lock for loading this class.
-
findClass
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 Class<?> defineClass(ClassLoader classLoader, String name, byte[] binaryRepresentation, @MaybeNull 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
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
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 Package definePackage(ClassLoader classLoader, String name, @MaybeNull String specificationTitle, @MaybeNull String specificationVersion, @MaybeNull String specificationVendor, @MaybeNull String implementationTitle, @MaybeNull String implementationVersion, @MaybeNull String implementationVendor, @MaybeNull 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.
-