public static enum AgentBuilder.DescriptionStrategy extends Enum<AgentBuilder.DescriptionStrategy>
TypeDescription when transforming or retransforming/-defining a type.| Enum Constant and Description |
|---|
HYBRID
A description type strategy represents a type as a
TypeDescription.ForLoadedType if a
retransformation or redefinition is applied on a type. |
POOL_ONLY
A description strategy that always describes Java types using a
TypePool. |
| Modifier and Type | Method and Description |
|---|---|
protected abstract TypeDescription |
apply(Class<?> type,
AgentBuilder.TypeLocator typeLocator)
Describes the given type.
|
protected abstract TypeDescription |
apply(String typeName,
Class<?> typeBeingRedefined,
AgentBuilder.TypeLocator typeLocator,
ClassLoader classLoader,
ClassFileLocator classFileLocator)
Describes the given type.
|
String |
toString() |
static AgentBuilder.DescriptionStrategy |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static AgentBuilder.DescriptionStrategy[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final AgentBuilder.DescriptionStrategy HYBRID
TypeDescription.ForLoadedType if a
retransformation or redefinition is applied on a type. Using a loaded type typically results in better performance as no
I/O is required for resolving type descriptions. However, any interaction with the type is carried out via the Java reflection
API. Using the reflection API triggers eager loading of any type that is part of a method or field signature. If any of these
types are missing from the class path, this eager loading will cause a NoClassDefFoundError. Some Java code declares
optional dependencies to other classes which are only realized if the optional dependency is present. Such code relies on the
Java reflection API not being used for types using optional dependencies.public static final AgentBuilder.DescriptionStrategy POOL_ONLY
A description strategy that always describes Java types using a TypePool. This requires that any type - even if it is already
loaded and a Class instance is available - is processed as a non-loaded type description. Doing so can cause overhead as processing
loaded types is supported very efficiently by a JVM.
Avoiding the usage of loaded types can improve robustness as this approach does not rely on the Java reflection API which triggers eager
validation of this loaded type which can fail an application if optional types are used by any types field or method signatures. Also, it
is possible to guarantee debugging meta data to be available also for retransformed or redefined types if a AgentBuilder.TypeStrategy specifies
the extraction of such meta data.
public static AgentBuilder.DescriptionStrategy[] values()
for (AgentBuilder.DescriptionStrategy c : AgentBuilder.DescriptionStrategy.values()) System.out.println(c);
public static AgentBuilder.DescriptionStrategy valueOf(String name)
name - the name of the enum constant to be returned.IllegalArgumentException - if this enum type has no constant with the specified nameNullPointerException - if the argument is nullprotected abstract TypeDescription apply(String typeName, Class<?> typeBeingRedefined, AgentBuilder.TypeLocator typeLocator, ClassLoader classLoader, ClassFileLocator classFileLocator)
typeName - The binary name of the type to describe.typeBeingRedefined - The type that is being redefined, if a redefinition is applied or null if no redefined type is available.typeLocator - The type locator to use.classLoader - The class loader of the type to be described.classFileLocator - The class file locator of the type to be described.protected abstract TypeDescription apply(Class<?> type, AgentBuilder.TypeLocator typeLocator)
type - The loaded type to be described.typeLocator - The type locator to use.public String toString()
toString in class Enum<AgentBuilder.DescriptionStrategy>Copyright © 2014–2016. All rights reserved.