protected abstract static class AgentBuilder.Default.Delegator extends Object implements AgentBuilder
Modifier and Type | Class and Description |
---|---|
protected static class |
AgentBuilder.Default.Delegator.Matchable<S extends AgentBuilder.Matchable<S>>
An abstract base implementation of a matchable.
|
AgentBuilder.CircularityLock, AgentBuilder.ClassFileBufferStrategy, AgentBuilder.Default, AgentBuilder.DescriptionStrategy, AgentBuilder.FallbackStrategy, AgentBuilder.Identified, AgentBuilder.Ignored, AgentBuilder.InitializationStrategy, AgentBuilder.InjectionStrategy, AgentBuilder.InstallationListener, AgentBuilder.LambdaInstrumentationStrategy, AgentBuilder.Listener, AgentBuilder.LocationStrategy, AgentBuilder.PatchMode, AgentBuilder.PoolStrategy, AgentBuilder.RawMatcher, AgentBuilder.RedefinitionListenable, AgentBuilder.RedefinitionStrategy, AgentBuilder.Transformer, AgentBuilder.TransformerDecorator, AgentBuilder.TypeStrategy
Modifier | Constructor and Description |
---|---|
protected |
Delegator() |
Modifier and Type | Method and Description |
---|---|
AgentBuilder |
assureReadEdgeFromAndTo(Instrumentation instrumentation,
Class<?>... type)
Assures that all modules of the supplied types are read by the module of any instrumented type and vice versa.
|
AgentBuilder |
assureReadEdgeFromAndTo(Instrumentation instrumentation,
Collection<? extends JavaModule> modules)
Assures that all supplied modules are read by the module of any instrumented type and vice versa.
|
AgentBuilder |
assureReadEdgeFromAndTo(Instrumentation instrumentation,
JavaModule... module)
Assures that all supplied modules are read by the module of any instrumented type and vice versa.
|
AgentBuilder |
assureReadEdgeTo(Instrumentation instrumentation,
Class<?>... type)
Assures that all modules of the supplied types are read by the module of any instrumented type.
|
AgentBuilder |
assureReadEdgeTo(Instrumentation instrumentation,
Collection<? extends JavaModule> modules)
Assures that all supplied modules are read by the module of any instrumented type.
|
AgentBuilder |
assureReadEdgeTo(Instrumentation instrumentation,
JavaModule... module)
Assures that all supplied modules are read by the module of any instrumented type.
|
AgentBuilder |
disableClassFormatChanges()
Disables all implicit changes on a class file that Byte Buddy would apply for certain instrumentations.
|
AgentBuilder |
disableNativeMethodPrefix()
Disables the use of a native method prefix for instrumented methods.
|
AgentBuilder |
enableNativeMethodPrefix(String prefix)
Enables the use of the given native method prefix for instrumented methods.
|
AgentBuilder.Ignored |
ignore(AgentBuilder.RawMatcher rawMatcher)
Excludes any type that is matched by the raw matcher provided to this method.
|
AgentBuilder.Ignored |
ignore(ElementMatcher<? super TypeDescription> ignoredTypes)
Excludes any type that is matched by the provided matcher from instrumentation and considers types by all
ClassLoader s. |
AgentBuilder.Ignored |
ignore(ElementMatcher<? super TypeDescription> ignoredTypes,
ElementMatcher<? super ClassLoader> ignoredClassLoaders)
Excludes any type that is matched by the provided matcher and is loaded by a class loader matching the second matcher.
|
AgentBuilder.Ignored |
ignore(ElementMatcher<? super TypeDescription> typeMatcher,
ElementMatcher<? super ClassLoader> classLoaderMatcher,
ElementMatcher<? super JavaModule> moduleMatcher)
Excludes any type that is matched by the provided matcher and is loaded by a class loader matching the second matcher.
|
ResettableClassFileTransformer |
installOn(Instrumentation instrumentation)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with a given Instrumentation . |
ResettableClassFileTransformer |
installOnByteBuddyAgent()
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with the Byte Buddy-agent which must be installed prior to calling this method. |
ClassFileTransformer |
makeRaw()
Creates a
ResettableClassFileTransformer that implements the configuration of this
agent builder. |
protected abstract AgentBuilder |
materialize()
Materializes the currently described
AgentBuilder . |
ResettableClassFileTransformer |
patchOn(Instrumentation instrumentation,
ResettableClassFileTransformer classFileTransformer)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with a given Instrumentation . |
ResettableClassFileTransformer |
patchOn(Instrumentation instrumentation,
ResettableClassFileTransformer classFileTransformer,
AgentBuilder.PatchMode patchMode)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with a given Instrumentation . |
ResettableClassFileTransformer |
patchOn(Instrumentation instrumentation,
ResettableClassFileTransformer classFileTransformer,
AgentBuilder.RawMatcher differentialMatcher)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with a given Instrumentation . |
ResettableClassFileTransformer |
patchOn(Instrumentation instrumentation,
ResettableClassFileTransformer classFileTransformer,
AgentBuilder.RawMatcher differentialMatcher,
AgentBuilder.PatchMode patchMode)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with a given Instrumentation . |
ResettableClassFileTransformer |
patchOnByteBuddyAgent(ResettableClassFileTransformer classFileTransformer)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with the Byte Buddy-agent which must be installed prior to calling this method. |
ResettableClassFileTransformer |
patchOnByteBuddyAgent(ResettableClassFileTransformer classFileTransformer,
AgentBuilder.PatchMode patchMode)
Creates and installs a
ResettableClassFileTransformer that implements the configuration of
this agent builder with the Byte Buddy-agent which must be installed prior to calling this method. |
AgentBuilder.Identified.Narrowable |
type(AgentBuilder.RawMatcher matcher)
Matches a type being loaded in order to apply the supplied
AgentBuilder.Transformer s before loading this type. |
AgentBuilder.Identified.Narrowable |
type(ElementMatcher<? super TypeDescription> typeMatcher)
Matches a type being loaded in order to apply the supplied
AgentBuilder.Transformer s before loading this type. |
AgentBuilder.Identified.Narrowable |
type(ElementMatcher<? super TypeDescription> typeMatcher,
ElementMatcher<? super ClassLoader> classLoaderMatcher)
Matches a type being loaded in order to apply the supplied
AgentBuilder.Transformer s before loading this type. |
AgentBuilder.Identified.Narrowable |
type(ElementMatcher<? super TypeDescription> typeMatcher,
ElementMatcher<? super ClassLoader> classLoaderMatcher,
ElementMatcher<? super JavaModule> moduleMatcher)
Matches a type being loaded in order to apply the supplied
AgentBuilder.Transformer s before loading this type. |
AgentBuilder |
warmUp(Class<?>... type)
Warms up the generated
ClassFileTransformer to trigger class loading of classes used by the transformer
prior to its actual use. |
AgentBuilder |
warmUp(Collection<Class<?>> types)
Warms up the generated
ClassFileTransformer to trigger class loading of classes used by the transformer
prior to its actual use. |
AgentBuilder |
with(AgentBuilder.CircularityLock circularityLock)
Defines a circularity lock that is acquired upon executing code that potentially loads new classes.
|
AgentBuilder |
with(AgentBuilder.ClassFileBufferStrategy classFileBufferStrategy)
Specifies a class file buffer strategy that determines the use of the buffer supplied to a class file transformer.
|
AgentBuilder |
with(AgentBuilder.DescriptionStrategy descriptionStrategy)
Specifies a strategy to be used for resolving
TypeDescription for any type handled by the created transformer. |
AgentBuilder |
with(AgentBuilder.FallbackStrategy fallbackStrategy)
Specifies a fallback strategy to that this agent builder applies upon installing an agent and during class file transformation.
|
AgentBuilder |
with(AgentBuilder.InitializationStrategy initializationStrategy)
Defines a given initialization strategy to be applied to generated types.
|
AgentBuilder |
with(AgentBuilder.InjectionStrategy injectionStrategy)
Defines a strategy for injecting auxiliary types into the target class loader.
|
AgentBuilder |
with(AgentBuilder.InstallationListener installationListener)
Adds an installation listener that is notified during installation events.
|
AgentBuilder |
with(AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy)
Enables or disables management of the JVM's
LambdaMetafactory which is responsible for creating classes that
implement lambda expressions. |
AgentBuilder |
with(AgentBuilder.Listener listener)
Defines the given
AgentBuilder.Listener to be notified by the created agent. |
AgentBuilder |
with(AgentBuilder.LocationStrategy locationStrategy)
Defines the use of the given location strategy for locating binary data to given class names.
|
AgentBuilder |
with(AgentBuilder.PoolStrategy poolStrategy)
Defines the use of the given type locator for locating a
TypeDescription for an instrumented type. |
AgentBuilder.RedefinitionListenable.WithoutBatchStrategy |
with(AgentBuilder.RedefinitionStrategy redefinitionStrategy)
Specifies a strategy for modifying types that were already loaded prior to the installation of this transformer.
|
AgentBuilder |
with(AgentBuilder.TransformerDecorator transformerDecorator)
Adds a decorator for the created class file transformer.
|
AgentBuilder |
with(AgentBuilder.TypeStrategy typeStrategy)
Defines how types should be transformed, e.g.
|
AgentBuilder |
with(ByteBuddy byteBuddy)
Defines the given
ByteBuddy instance to be used by the created agent. |
AgentBuilder |
with(ClassFileLocator classFileLocator)
Registers an additional class file locator for types that are globally available but cannot be located
otherwise.
|
protected abstract AgentBuilder materialize()
AgentBuilder
.public AgentBuilder with(ByteBuddy byteBuddy)
ByteBuddy
instance to be used by the created agent.with
in interface AgentBuilder
byteBuddy
- The Byte Buddy instance to be used.byteBuddy
instance.public AgentBuilder with(AgentBuilder.Listener listener)
AgentBuilder.Listener
to be notified by the created agent.
The given listener is notified after any other listener that is already registered. If a listener is registered
twice, it is also notified twice.with
in interface AgentBuilder
listener
- The listener to be notified.public AgentBuilder with(AgentBuilder.CircularityLock circularityLock)
AgentBuilder.CircularityLock
to avoid that any classes that are required to execute an agent
causes a ClassCircularityError
.with
in interface AgentBuilder
circularityLock
- The circularity lock to use.public AgentBuilder with(AgentBuilder.TypeStrategy typeStrategy)
with
in interface AgentBuilder
typeStrategy
- The type strategy to use.public AgentBuilder with(AgentBuilder.PoolStrategy poolStrategy)
TypeDescription
for an instrumented type.with
in interface AgentBuilder
poolStrategy
- The type locator to use.public AgentBuilder with(AgentBuilder.LocationStrategy locationStrategy)
with
in interface AgentBuilder
locationStrategy
- The location strategy to use.public AgentBuilder with(ClassFileLocator classFileLocator)
with
in interface AgentBuilder
classFileLocator
- The class file locator to add.public AgentBuilder with(AgentBuilder.InitializationStrategy initializationStrategy)
with
in interface AgentBuilder
initializationStrategy
- The initialization strategy to use.public AgentBuilder.RedefinitionListenable.WithoutBatchStrategy with(AgentBuilder.RedefinitionStrategy redefinitionStrategy)
Specifies a strategy for modifying types that were already loaded prior to the installation of this transformer.
Note: Defining a redefinition strategy resets any refinements of a previously set redefinition strategy.
Important: Most JVMs do not support changes of a class's structure after a class was already
loaded. Therefore, it is typically required that this class file transformer was built while enabling
AgentBuilder.disableClassFormatChanges()
.
with
in interface AgentBuilder
redefinitionStrategy
- The redefinition strategy to apply.public AgentBuilder with(AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy)
Enables or disables management of the JVM's LambdaMetafactory
which is responsible for creating classes that
implement lambda expressions. Without this feature enabled, classes that are represented by lambda expressions are
not instrumented by the JVM such that Java agents have no effect on them when a lambda expression's class is loaded
for the first time.
When activating this feature, Byte Buddy instruments the LambdaMetafactory
and takes over the responsibility
of creating classes that represent lambda expressions. In doing so, Byte Buddy has the opportunity to apply the built
class file transformer. If the current VM does not support lambda expressions, activating this feature has no effect.
Important: If this feature is active, it is important to release the built class file transformer when
deactivating it. Normally, it is sufficient to call Instrumentation.removeTransformer(ClassFileTransformer)
.
When this feature is enabled, it is however also required to invoke
AgentBuilder.LambdaInstrumentationStrategy.release(ClassFileTransformer, Instrumentation)
. Otherwise, the executing VMs class
loader retains a reference to the class file transformer what can cause a memory leak.
with
in interface AgentBuilder
lambdaInstrumentationStrategy
- true
if this feature should be enabled.public AgentBuilder with(AgentBuilder.DescriptionStrategy descriptionStrategy)
TypeDescription
for any type handled by the created transformer.with
in interface AgentBuilder
descriptionStrategy
- The description strategy to use.public AgentBuilder with(AgentBuilder.FallbackStrategy fallbackStrategy)
with
in interface AgentBuilder
fallbackStrategy
- The fallback strategy to be used.public AgentBuilder with(AgentBuilder.ClassFileBufferStrategy classFileBufferStrategy)
with
in interface AgentBuilder
classFileBufferStrategy
- The class file buffer strategy to use.public AgentBuilder with(AgentBuilder.InstallationListener installationListener)
ResettableClassFileTransformer
's reset
methods.with
in interface AgentBuilder
installationListener
- The installation listener to register.public AgentBuilder with(AgentBuilder.InjectionStrategy injectionStrategy)
with
in interface AgentBuilder
injectionStrategy
- The injection strategy to use.public AgentBuilder with(AgentBuilder.TransformerDecorator transformerDecorator)
with
in interface AgentBuilder
transformerDecorator
- A decorator to wrap the created class file transformer.public AgentBuilder enableNativeMethodPrefix(String prefix)
Instrumentation
.enableNativeMethodPrefix
in interface AgentBuilder
prefix
- The prefix to be used.public AgentBuilder disableNativeMethodPrefix()
disableNativeMethodPrefix
in interface AgentBuilder
public AgentBuilder disableClassFormatChanges()
Disables all implicit changes on a class file that Byte Buddy would apply for certain instrumentations. When using this option, it is no longer possible to rebase a method, i.e. intercepted methods are fully replaced. Furthermore, it is no longer possible to implicitly apply loaded type initializers for explicitly initializing the generated type.
This is equivalent to setting AgentBuilder.InitializationStrategy.NoOp
and AgentBuilder.TypeStrategy.Default.REDEFINE_FROZEN
(unless it is configured as AgentBuilder.TypeStrategy.Default.DECORATE
where this strategy is retained)
as well as configuring the underlying ByteBuddy
instance to use a Implementation.Context.Disabled
.
Using this strategy also configures Byte Buddy to create frozen instrumented types and discards any explicit configuration.
disableClassFormatChanges
in interface AgentBuilder
public AgentBuilder warmUp(Class<?>... type)
Warms up the generated ClassFileTransformer
to trigger class loading of classes used by the transformer
prior to its actual use. Ideally, warmup should include classes that cause a transformation and classes that
are ignored. Warming up can be especially useful when transforming classes on the boot path, where circularity
errors are more likely. At the same time, warming up might load classes that are expected to be unloaded
when this agent is installed.
Important: Warming up is applied just as a regular transformation and will also invoke the AgentBuilder.Listener
.
This is done to avoid that listener classes can cause circularities. It is the users responsibility to suppress
such log output, if necessary.
warmUp
in interface AgentBuilder
type
- The types to include in the warmup.public AgentBuilder warmUp(Collection<Class<?>> types)
Warms up the generated ClassFileTransformer
to trigger class loading of classes used by the transformer
prior to its actual use. Ideally, warmup should include classes that cause a transformation and classes that
are ignored. Warming up can be especially useful when transforming classes on the boot path, where circularity
errors are more likely. At the same time, warming up might load classes that are expected to be unloaded
when this agent is installed.
Important: Warming up is applied just as a regular transformation and will also invoke the AgentBuilder.Listener
.
This is done to avoid that listener classes can cause circularities. It is the users responsibility to suppress
such log output, if necessary.
warmUp
in interface AgentBuilder
types
- The types to include in the warmup.public AgentBuilder assureReadEdgeTo(Instrumentation instrumentation, Class<?>... type)
assureReadEdgeTo
in interface AgentBuilder
instrumentation
- The instrumentation instance that is used for adding a module read-dependency.type
- The types for which to assure their module-visibility from any instrumented class.AgentBuilder.Listener.ModuleReadEdgeCompleting
public AgentBuilder assureReadEdgeTo(Instrumentation instrumentation, JavaModule... module)
assureReadEdgeTo
in interface AgentBuilder
instrumentation
- The instrumentation instance that is used for adding a module read-dependency.module
- The modules for which to assure their module-visibility from any instrumented class.AgentBuilder.Listener.ModuleReadEdgeCompleting
public AgentBuilder assureReadEdgeTo(Instrumentation instrumentation, Collection<? extends JavaModule> modules)
assureReadEdgeTo
in interface AgentBuilder
instrumentation
- The instrumentation instance that is used for adding a module read-dependency.modules
- The modules for which to assure their module-visibility from any instrumented class.AgentBuilder.Listener.ModuleReadEdgeCompleting
public AgentBuilder assureReadEdgeFromAndTo(Instrumentation instrumentation, Class<?>... type)
assureReadEdgeFromAndTo
in interface AgentBuilder
instrumentation
- The instrumentation instance that is used for adding a module read-dependency.type
- The types for which to assure their module-visibility from and to any instrumented class.AgentBuilder.Listener.ModuleReadEdgeCompleting
public AgentBuilder assureReadEdgeFromAndTo(Instrumentation instrumentation, JavaModule... module)
assureReadEdgeFromAndTo
in interface AgentBuilder
instrumentation
- The instrumentation instance that is used for adding a module read-dependency.module
- The modules for which to assure their module-visibility from and to any instrumented class.AgentBuilder.Listener.ModuleReadEdgeCompleting
public AgentBuilder assureReadEdgeFromAndTo(Instrumentation instrumentation, Collection<? extends JavaModule> modules)
assureReadEdgeFromAndTo
in interface AgentBuilder
instrumentation
- The instrumentation instance that is used for adding a module read-dependency.modules
- The modules for which to assure their module-visibility from and to any instrumented class.AgentBuilder.Listener.ModuleReadEdgeCompleting
public AgentBuilder.Identified.Narrowable type(ElementMatcher<? super TypeDescription> typeMatcher)
Matches a type being loaded in order to apply the supplied AgentBuilder.Transformer
s before loading this type.
If several matchers positively match a type only the latest registered matcher is considered for transformation.
If this matcher is chained with additional subsequent matchers, any matcher is executed in registration order with matchers that were registered
first being executed first. Doing so, later transformations can override transformations that are applied by this matcher. To avoid this, it is
possible to register this transformation as terminal via AgentBuilder.Identified.Extendable.asTerminalTransformation()
where no subsequent matchers
are applied if this matcher matched a given type.
Note: When applying a matcher, regard the performance implications by AgentBuilder.ignore(ElementMatcher)
. The former
matcher is applied first such that it makes sense to ignore name spaces that are irrelevant to instrumentation. If possible, it is
also recommended, to exclude class loaders such as for example the bootstrap class loader by using
AgentBuilder.type(ElementMatcher, ElementMatcher)
instead.
type
in interface AgentBuilder
typeMatcher
- An ElementMatcher
that is applied on the type being loaded that
decides if the entailed AgentBuilder.Transformer
s should
be applied for that type.AgentBuilder.Transformer
s to be applied when the given typeMatcher
indicates a match.public AgentBuilder.Identified.Narrowable type(ElementMatcher<? super TypeDescription> typeMatcher, ElementMatcher<? super ClassLoader> classLoaderMatcher)
Matches a type being loaded in order to apply the supplied AgentBuilder.Transformer
s before loading this type.
If several matchers positively match a type only the latest registered matcher is considered for transformation.
If this matcher is chained with additional subsequent matchers, any matcher is executed in registration order with matchers that were registered
first being executed first. Doing so, later transformations can override transformations that are applied by this matcher. To avoid this, it is
possible to register this transformation as terminal via AgentBuilder.Identified.Extendable.asTerminalTransformation()
where no subsequent matchers
are applied if this matcher matched a given type.
Note: When applying a matcher, regard the performance implications by AgentBuilder.ignore(ElementMatcher)
. The former
matcher is applied first such that it makes sense to ignore name spaces that are irrelevant to instrumentation. If possible, it
is also recommended, to exclude class loaders such as for example the bootstrap class loader.
type
in interface AgentBuilder
typeMatcher
- An ElementMatcher
that is applied on the type being
loaded that decides if the entailed
AgentBuilder.Transformer
s should be applied for
that type.classLoaderMatcher
- An ElementMatcher
that is applied to the
ClassLoader
that is loading the type being loaded. This matcher
is always applied first where the type matcher is not applied in case that this
matcher does not indicate a match.AgentBuilder.Transformer
s to be applied when both the given
typeMatcher
and classLoaderMatcher
indicate a match.public AgentBuilder.Identified.Narrowable type(ElementMatcher<? super TypeDescription> typeMatcher, ElementMatcher<? super ClassLoader> classLoaderMatcher, ElementMatcher<? super JavaModule> moduleMatcher)
Matches a type being loaded in order to apply the supplied AgentBuilder.Transformer
s before loading this type.
If several matchers positively match a type only the latest registered matcher is considered for transformation.
If this matcher is chained with additional subsequent matchers, any matcher is executed in registration order with matchers that were registered
first being executed first. Doing so, later transformations can override transformations that are applied by this matcher. To avoid this, it is
possible to register this transformation as terminal via AgentBuilder.Identified.Extendable.asTerminalTransformation()
where no subsequent matchers
are applied if this matcher matched a given type.
Note: When applying a matcher, regard the performance implications by AgentBuilder.ignore(ElementMatcher)
. The former
matcher is applied first such that it makes sense to ignore name spaces that are irrelevant to instrumentation. If possible, it
is also recommended, to exclude class loaders such as for example the bootstrap class loader.
type
in interface AgentBuilder
typeMatcher
- An ElementMatcher
that is applied on the type being
loaded that decides if the entailed
AgentBuilder.Transformer
s should be applied for
that type.classLoaderMatcher
- An ElementMatcher
that is applied to the
ClassLoader
that is loading the type being loaded. This matcher
is always applied second where the type matcher is not applied in case that this
matcher does not indicate a match.moduleMatcher
- An ElementMatcher
that is applied to the JavaModule
of the type being loaded. This matcher is always applied first where the class loader and
type matchers are not applied in case that this matcher does not indicate a match. On a JVM
that does not support the Java modules system, this matcher is not applied.AgentBuilder.Transformer
s to be applied when both the given
typeMatcher
and classLoaderMatcher
indicate a match.public AgentBuilder.Identified.Narrowable type(AgentBuilder.RawMatcher matcher)
Matches a type being loaded in order to apply the supplied AgentBuilder.Transformer
s before loading this type.
If several matchers positively match a type only the latest registered matcher is considered for transformation.
If this matcher is chained with additional subsequent matchers, any matcher is executed in registration order with matchers that were registered
first being executed first. Doing so, later transformations can override transformations that are applied by this matcher. To avoid this, it is
possible to register this transformation as terminal via AgentBuilder.Identified.Extendable.asTerminalTransformation()
where no subsequent matchers
are applied if this matcher matched a given type.
Note: When applying a matcher, regard the performance implications by AgentBuilder.ignore(ElementMatcher)
. The former
matcher is applied first such that it makes sense to ignore name spaces that are irrelevant to instrumentation. If possible, it
is also recommended, to exclude class loaders such as for example the bootstrap class loader.
type
in interface AgentBuilder
matcher
- A matcher that decides if the entailed AgentBuilder.Transformer
s should be
applied for a type that is being loaded.AgentBuilder.Transformer
s to be applied when the given matcher
indicates a match.public AgentBuilder.Ignored ignore(ElementMatcher<? super TypeDescription> ignoredTypes)
Excludes any type that is matched by the provided matcher from instrumentation and considers types by all ClassLoader
s.
By default, Byte Buddy does not instrument synthetic types or types that are loaded by the bootstrap class loader.
When ignoring a type, any subsequently chained matcher is applied after this matcher in the order of their registration. Also, if any matcher indicates that a type is to be ignored, none of the following chained matchers is executed.
Note: For performance reasons, it is recommended to always include a matcher that excludes as many namespaces as possible. Byte Buddy can determine a type's name without parsing its class file and can therefore discard such types with minimal overhead. When a different property of a type - such as for example its modifiers or its annotations is accessed - Byte Buddy parses the class file lazily in order to allow for such a matching. Therefore, any exclusion of a name should always be done as a first step and even if it does not influence the selection of what types are matched. Without changing this property, the class file of every type is being parsed!
Warning: If a type is loaded during the instrumentation of the same type, this causes the original call site that loads the type
to remain unbound, causing a LinkageError
. It is therefore important to not instrument types that may be loaded during the application
of a AgentBuilder.Transformer
. For this reason, it is not recommended to instrument classes of the bootstrap class loader that Byte Buddy might
require for instrumenting a class or to instrument any of Byte Buddy's classes. If such instrumentation is desired, it is important to
assert for each class that they are not loaded during instrumentation.
ignore
in interface AgentBuilder
ignoredTypes
- A matcher that identifies types that should not be instrumented.public AgentBuilder.Ignored ignore(ElementMatcher<? super TypeDescription> ignoredTypes, ElementMatcher<? super ClassLoader> ignoredClassLoaders)
Excludes any type that is matched by the provided matcher and is loaded by a class loader matching the second matcher.
By default, Byte Buddy does not instrument synthetic types, types within a net.bytebuddy.*
package or types that
are loaded by the bootstrap class loader.
When ignoring a type, any subsequently chained matcher is applied after this matcher in the order of their registration. Also, if any matcher indicates that a type is to be ignored, none of the following chained matchers is executed.
Note: For performance reasons, it is recommended to always include a matcher that excludes as many namespaces as possible. Byte Buddy can determine a type's name without parsing its class file and can therefore discard such types with minimal overhead. When a different property of a type - such as for example its modifiers or its annotations is accessed - Byte Buddy parses the class file lazily in order to allow for such a matching. Therefore, any exclusion of a name should always be done as a first step and even if it does not influence the selection of what types are matched. Without changing this property, the class file of every type is being parsed!
Warning: If a type is loaded during the instrumentation of the same type, this causes the original call site that loads the type
to remain unbound, causing a LinkageError
. It is therefore important to not instrument types that may be loaded during the application
of a AgentBuilder.Transformer
. For this reason, it is not recommended to instrument classes of the bootstrap class loader that Byte Buddy might
require for instrumenting a class or to instrument any of Byte Buddy's classes. If such instrumentation is desired, it is important to
assert for each class that they are not loaded during instrumentation.
ignore
in interface AgentBuilder
ignoredTypes
- A matcher that identifies types that should not be instrumented.ignoredClassLoaders
- A matcher that identifies a class loader that identifies classes that should not be instrumented.public AgentBuilder.Ignored ignore(ElementMatcher<? super TypeDescription> typeMatcher, ElementMatcher<? super ClassLoader> classLoaderMatcher, ElementMatcher<? super JavaModule> moduleMatcher)
Excludes any type that is matched by the provided matcher and is loaded by a class loader matching the second matcher.
By default, Byte Buddy does not instrument synthetic types, types within a net.bytebuddy.*
package or types that
are loaded by the bootstrap class loader.
When ignoring a type, any subsequently chained matcher is applied after this matcher in the order of their registration. Also, if any matcher indicates that a type is to be ignored, none of the following chained matchers is executed.
Note: For performance reasons, it is recommended to always include a matcher that excludes as many namespaces as possible. Byte Buddy can determine a type's name without parsing its class file and can therefore discard such types with minimal overhead. When a different property of a type - such as for example its modifiers or its annotations is accessed - Byte Buddy parses the class file lazily in order to allow for such a matching. Therefore, any exclusion of a name should always be done as a first step and even if it does not influence the selection of what types are matched. Without changing this property, the class file of every type is being parsed!
Warning: If a type is loaded during the instrumentation of the same type, this causes the original call site that loads the type
to remain unbound, causing a LinkageError
. It is therefore important to not instrument types that may be loaded during the application
of a AgentBuilder.Transformer
. For this reason, it is not recommended to instrument classes of the bootstrap class loader that Byte Buddy might
require for instrumenting a class or to instrument any of Byte Buddy's classes. If such instrumentation is desired, it is important to
assert for each class that they are not loaded during instrumentation.
ignore
in interface AgentBuilder
typeMatcher
- A matcher that identifies types that should not be instrumented.classLoaderMatcher
- A matcher that identifies a class loader that identifies classes that should not be instrumented.moduleMatcher
- A matcher that identifies a module that identifies classes that should not be instrumented. On a JVM
that does not support the Java modules system, this matcher is not applied.public AgentBuilder.Ignored ignore(AgentBuilder.RawMatcher rawMatcher)
Excludes any type that is matched by the raw matcher provided to this method. By default, Byte Buddy does not
instrument synthetic types, types within a net.bytebuddy.*
package or types that are loaded by the bootstrap class loader.
When ignoring a type, any subsequently chained matcher is applied after this matcher in the order of their registration. Also, if any matcher indicates that a type is to be ignored, none of the following chained matchers is executed.
Note: For performance reasons, it is recommended to always include a matcher that excludes as many namespaces as possible. Byte Buddy can determine a type's name without parsing its class file and can therefore discard such types with minimal overhead. When a different property of a type - such as for example its modifiers or its annotations is accessed - Byte Buddy parses the class file lazily in order to allow for such a matching. Therefore, any exclusion of a name should always be done as a first step and even if it does not influence the selection of what types are matched. Without changing this property, the class file of every type is being parsed!
Warning: If a type is loaded during the instrumentation of the same type, this causes the original call site that loads the type
to remain unbound, causing a LinkageError
. It is therefore important to not instrument types that may be loaded during the application
of a AgentBuilder.Transformer
. For this reason, it is not recommended to instrument classes of the bootstrap class loader that Byte Buddy might
require for instrumenting a class or to instrument any of Byte Buddy's classes. If such instrumentation is desired, it is important to
assert for each class that they are not loaded during instrumentation.
ignore
in interface AgentBuilder
rawMatcher
- A raw matcher that identifies types that should not be instrumented.public ClassFileTransformer makeRaw()
ResettableClassFileTransformer
that implements the configuration of this
agent builder. When using a raw class file transformer, the AgentBuilder.InstallationListener
callbacks are
not invoked and the set AgentBuilder.RedefinitionStrategy
is not applied onto currently loaded classes.makeRaw
in interface AgentBuilder
public ResettableClassFileTransformer installOn(Instrumentation instrumentation)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with a given Instrumentation
. If retransformation is enabled,
the installation also causes all loaded types to be retransformed.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
installOn
in interface AgentBuilder
instrumentation
- The instrumentation on which this agent builder's configuration is to be installed.public ResettableClassFileTransformer installOnByteBuddyAgent()
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with the Byte Buddy-agent which must be installed prior to calling this method. If retransformation
is enabled, the installation also causes all loaded types to be retransformed.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
installOnByteBuddyAgent
in interface AgentBuilder
AgentBuilder.installOn(Instrumentation)
public ResettableClassFileTransformer patchOn(Instrumentation instrumentation, ResettableClassFileTransformer classFileTransformer)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with a given Instrumentation
. If retransformation is enabled,
the installation also causes all loaded types to be retransformed which have changed compared to the previous
class file transformer that is provided as an argument. Without specification, AgentBuilder.PatchMode.OVERLAP
is used.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
patchOn
in interface AgentBuilder
instrumentation
- The instrumentation on which this agent builder's configuration is to be installed.classFileTransformer
- The class file transformer that is being patched.public ResettableClassFileTransformer patchOn(Instrumentation instrumentation, ResettableClassFileTransformer classFileTransformer, AgentBuilder.RawMatcher differentialMatcher)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with a given Instrumentation
. If retransformation is enabled,
the installation also causes all loaded types to be retransformed which have changed compared to the previous
class file transformer that is provided as an argument. Without specification, AgentBuilder.PatchMode.OVERLAP
is used.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
patchOn
in interface AgentBuilder
instrumentation
- The instrumentation on which this agent builder's configuration is to be installed.classFileTransformer
- The class file transformer that is being patched.differentialMatcher
- The differential matcher to decide what types need retransformation.public ResettableClassFileTransformer patchOn(Instrumentation instrumentation, ResettableClassFileTransformer classFileTransformer, AgentBuilder.PatchMode patchMode)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with a given Instrumentation
. If retransformation is enabled,
the installation also causes all loaded types to be retransformed which have changed compared to the previous
class file transformer that is provided as an argument.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
patchOn
in interface AgentBuilder
instrumentation
- The instrumentation on which this agent builder's configuration is to be installed.classFileTransformer
- The class file transformer that is being patched.patchMode
- The patch mode to apply.public ResettableClassFileTransformer patchOn(Instrumentation instrumentation, ResettableClassFileTransformer classFileTransformer, AgentBuilder.RawMatcher differentialMatcher, AgentBuilder.PatchMode patchMode)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with a given Instrumentation
. If retransformation is enabled,
the installation also causes all loaded types to be retransformed which have changed compared to the previous
class file transformer that is provided as an argument.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
patchOn
in interface AgentBuilder
instrumentation
- The instrumentation on which this agent builder's configuration is to be installed.classFileTransformer
- The class file transformer that is being patched.differentialMatcher
- The differential matcher to decide what types need retransformation.patchMode
- The patch mode to apply.public ResettableClassFileTransformer patchOnByteBuddyAgent(ResettableClassFileTransformer classFileTransformer)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with the Byte Buddy-agent which must be installed prior to calling this method. If retransformation
is enabled, the installation also causes all loaded types to be retransformed which have changed compared to the previous
class file transformer that is provided as an argument. Without specification, AgentBuilder.PatchMode.OVERLAP
is used.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
patchOnByteBuddyAgent
in interface AgentBuilder
classFileTransformer
- The class file transformer that is being patched.AgentBuilder.patchOn(Instrumentation, ResettableClassFileTransformer)
public ResettableClassFileTransformer patchOnByteBuddyAgent(ResettableClassFileTransformer classFileTransformer, AgentBuilder.PatchMode patchMode)
Creates and installs a ResettableClassFileTransformer
that implements the configuration of
this agent builder with the Byte Buddy-agent which must be installed prior to calling this method. If retransformation
is enabled, the installation also causes all loaded types to be retransformed which have changed compared to the previous
class file transformer that is provided as an argument.
In order to assure the correct handling of the AgentBuilder.InstallationListener
, an uninstallation should be applied
via the ResettableClassFileTransformer
's reset
methods.
patchOnByteBuddyAgent
in interface AgentBuilder
classFileTransformer
- The class file transformer that is being patched.patchMode
- The patch mode to apply.AgentBuilder.patchOn(Instrumentation, ResettableClassFileTransformer, PatchMode)
Copyright © 2014–2025. All rights reserved.