Class JavaDispatcher<T>
- Type Parameters:
T- The resolved type.
- All Implemented Interfaces:
PrivilegedAction<T>
A dispatcher for creating a proxy that invokes methods of a type that is possibly unknown on the current VM. Dispatchers do not use any of Byte Buddy's regular infrastructure, to avoid bootstrapping issues as these dispatchers are used by Byte Buddy itself.
By default, this dispatcher uses the Java Proxy for creating dispatchers. By setting net.bytebuddy.generate to
true, Byte Buddy can generate proxies manually as byte code to mostly avoid reflection and boxing of arguments as arrays.
If a security manager is active, the net.bytebuddy.createJavaDispatcher runtime permission is required. Any dispatching
will be executed from a separate class loader and an unnamed module but with the ProtectionDomain of
the JavaDispatcher class. It is not permitted to invoke methods of the java.security.AccessController class or
to resolve a java.lang.invoke.MethodHandle$Lookup.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic @interfaceIndicates that the method is supposed to return an array of the proxied type.static @interfaceIndicates that a method is supposed to return a default value if a method or type could not be resolved.protected static interfaceA dispatcher for handling a proxied method.protected static classA class loader for loading synthetic classes for implementing aJavaDispatcher.static @interfaceIndicates that a method is supposed to perform an instance check.static @interfaceIndicates that a proxied method is a constructor.static @interfaceIndicates that a proxied method is static.static @interfaceIndicates a proxied type's name.protected static classAn invocation handler that invokes given dispatchers. -
Field Summary
Fields -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedJavaDispatcher(Class<T> proxy, ClassLoader classLoader, boolean generate) Creates a new dispatcher. -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> PrivilegedAction<T> Resolves an action for creating a dispatcher for the provided type where the proxied type is resolved from the bootstrap loader.static <T> PrivilegedAction<T> of(Class<T> type, ClassLoader classLoader) Resolves an action for creating a dispatcher for the provided type.protected static <T> PrivilegedAction<T> of(Class<T> type, ClassLoader classLoader, boolean generate) Resolves an action for creating a dispatcher for the provided type.run()
-
Field Details
-
GENERATE_PROPERTY
-
-
Constructor Details
-
JavaDispatcher
Creates a new dispatcher.- Parameters:
proxy- The proxy type.classLoader- The class loader to resolve the proxied type from ornullif the bootstrap loader should be used.generate-trueif a proxy class should be manually generated.
-
-
Method Details
-
of
Resolves an action for creating a dispatcher for the provided type where the proxied type is resolved from the bootstrap loader.- Type Parameters:
T- The resolved type.- Parameters:
type- The type for which a dispatcher should be resolved.- Returns:
- An action for creating an appropriate dispatcher.
-
of
Resolves an action for creating a dispatcher for the provided type.- Type Parameters:
T- The resolved type.- Parameters:
type- The type for which a dispatcher should be resolved.classLoader- The class loader to resolve the proxied type from.- Returns:
- An action for creating an appropriate dispatcher.
-
of
protected static <T> PrivilegedAction<T> of(Class<T> type, @MaybeNull ClassLoader classLoader, boolean generate) Resolves an action for creating a dispatcher for the provided type.- Type Parameters:
T- The resolved type.- Parameters:
type- The type for which a dispatcher should be resolved.classLoader- The class loader to resolve the proxied type from.generate-trueif a proxy class should be manually generated.- Returns:
- An action for creating an appropriate dispatcher.
-
run
- Specified by:
runin interfacePrivilegedAction<T>
-