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 java.lang.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
Fields Modifier and Type Field Description private java.lang.ObjectaccessorAn instance of the accessor class that is required for using it's intentionally non-static methods.private java.lang.reflect.MethoddefineClassThe accessor method for usingClassLoader.defineClass(String, byte[], int, int, ProtectionDomain).private java.lang.reflect.MethoddefinePackageThe accessor method for usingClassLoader.definePackage(String, String, String, String, String, String, String, URL).private java.lang.reflect.MethodfindLoadedClassThe accessor method for usingClassLoader.findLoadedClass(String).private java.lang.reflect.MethodgetClassLoadingLockThe accessor method for usingClassLoader#getClassLoadingLock(String)or returning the suppliedClassLoaderif this method does not exist on the current VM.private java.lang.reflect.MethodgetDefinedPackageThe accessor method for usingjava.lang.ClassLoader#getDefinedPackage(String).private java.lang.reflect.MethodgetPackageThe accessor method for usingClassLoader.getPackage(String).-
Fields inherited from interface net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher
UNDEFINED
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedUsingUnsafeInjection(java.lang.Object accessor, 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, java.lang.reflect.Method getClassLoadingLock)Creates a new class loading injection dispatcher using an unsafe injected 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.PackagedefinePackage(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.ObjectgetClassLoadingLock(java.lang.ClassLoader classLoader, java.lang.String name)Returns the lock for loading the specified class.java.lang.PackagegetDefinedPackage(java.lang.ClassLoader classLoader, java.lang.String name)Looks up a package from a class loader.java.lang.PackagegetPackage(java.lang.ClassLoader classLoader, java.lang.String name)Looks up a package from a class loader or its ancestor.ClassInjector.UsingReflection.Dispatcherinitialize()Initializes this dispatcher.booleanisAvailable()Indicates if this dispatcher is available.protected static ClassInjector.UsingReflection.Dispatcher.Initializablemake()Creates an indirect dispatcher.
-
-
-
Field Detail
-
accessor
private final java.lang.Object accessor
An instance of the accessor class that is required for using it's intentionally non-static methods.
-
findLoadedClass
private final java.lang.reflect.Method findLoadedClass
The accessor method for usingClassLoader.findLoadedClass(String).
-
defineClass
private final java.lang.reflect.Method defineClass
The accessor method for usingClassLoader.defineClass(String, byte[], int, int, ProtectionDomain).
-
getDefinedPackage
private final java.lang.reflect.Method getDefinedPackage
The accessor method for usingjava.lang.ClassLoader#getDefinedPackage(String). May benull.
-
getPackage
private final java.lang.reflect.Method getPackage
The accessor method for usingClassLoader.getPackage(String).
-
definePackage
private final java.lang.reflect.Method definePackage
The accessor method for usingClassLoader.definePackage(String, String, String, String, String, String, String, URL).
-
getClassLoadingLock
private final java.lang.reflect.Method getClassLoadingLock
The accessor method for usingClassLoader#getClassLoadingLock(String)or returning the suppliedClassLoaderif this method does not exist on the current VM.
-
-
Constructor Detail
-
UsingUnsafeInjection
protected UsingUnsafeInjection(java.lang.Object accessor, 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, java.lang.reflect.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 suppliedClassLoaderif this method does not exist on the current VM.
-
-
Method Detail
-
make
protected static ClassInjector.UsingReflection.Dispatcher.Initializable make() throws java.lang.Exception
Creates an indirect dispatcher.- Returns:
- An indirect dispatcher for class creation.
- Throws:
java.lang.Exception- If the dispatcher cannot be created.
-
isAvailable
public boolean isAvailable()
Indicates if this dispatcher is available.- Specified by:
isAvailablein interfaceClassInjector.UsingReflection.Dispatcher.Initializable- Returns:
trueif this dispatcher is available.
-
initialize
public ClassInjector.UsingReflection.Dispatcher initialize()
Initializes this dispatcher.- Specified by:
initializein interfaceClassInjector.UsingReflection.Dispatcher.Initializable- Returns:
- The initialized dispatcher.
-
getClassLoadingLock
public java.lang.Object getClassLoadingLock(java.lang.ClassLoader classLoader, java.lang.String name)Returns the lock for loading the specified class.- Specified by:
getClassLoadingLockin 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
public java.lang.Class<?> findClass(java.lang.ClassLoader classLoader, java.lang.String name)Looks up a class from the given class loader.- Specified by:
findClassin 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
nullif 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:
defineClassin 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)Looks up a package from a class loader. If the operation is not supported, falls back toClassInjector.UsingReflection.Dispatcher.getPackage(ClassLoader, String)- Specified by:
getDefinedPackagein 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
nullif 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:
getPackagein 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
nullif 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:
definePackagein 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 ornullif no specification title exists.specificationVersion- The specification version of the package ornullif no specification version exists.specificationVendor- The specification vendor of the package ornullif no specification vendor exists.implementationTitle- The implementation title of the package ornullif no implementation title exists.implementationVersion- The implementation version of the package ornullif no implementation version exists.implementationVendor- The implementation vendor of the package ornullif no implementation vendor exists.sealBase- The seal base URL ornullif the package should not be sealed.- Returns:
- The defined package.
-
-