Top Description Fields Constructors Methods
io.micrometer.common.annotation

public Class AnnotationHandler<T>

extends Object
Class Inheritance
Type Parameters
<T>
type which should be enriched with KeyValue information
Imports
io.micrometer.common.KeyValue, io.micrometer.common.util.internal.logging.InternalLogger, .InternalLoggerFactory, org.aspectj.lang.ProceedingJoinPoint, org.aspectj.lang.reflect.MethodSignature, java.lang.annotation.Annotation, java.lang.reflect.Method, java.util.Arrays, .List, java.util.function.BiConsumer, .BiFunction, .Function

This class is able to find all methods annotated with the Micrometer annotations. All methods mean that if you have both an interface and an implementation annotated with Micrometer annotations then this class is capable of finding both of them and merging into one set of information.

This information is then used to add proper key-values to objects such as span or timer from the method arguments that are annotated with a proper annotation. Code ported from Spring Cloud Sleuth.

Author
Christian Schwerdtfeger
Since
1.11.0

Field Summary

Modifier and TypeField and Description
private final Class<? extends Annotation>
private final Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver>
private final BiConsumer<KeyValue, T>
private static final InternalLogger
private final Function<Class<? extends ValueResolver>, ? extends ValueResolver>
private final BiFunction<Annotation, Object, KeyValue>

Constructor Summary

AccessConstructor and Description
public
AnnotationHandler(BiConsumer<KeyValue, T>
consumer that takes a KeyValue and mutates the <T> type
keyValueConsumer
,
Function<Class<? extends ValueResolver>, ? extends ValueResolver>
function converting a class extending a ValueResolver to an instance of that class
resolverProvider
,
Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver>
function converting a class extending a ValueExpressionResolver to an instance of that class
expressionResolverProvider
,
Class<? extends Annotation>
annotation containing KeyValue related information
annotation
,
BiFunction<Annotation, Object, KeyValue>
function converting the annotation and the expression or annotation value to a KeyValue
toKeyValue
)

Creates a new instance of AnnotationHandler.

Method Summary

Modifier and TypeMethod and Description
private void
addAnnotatedArguments(T objectToModify, List<AnnotatedParameter> toBeAdded)

public void
addAnnotatedParameters(T
object to modify
objectToModify
,
ProceedingJoinPoint
proceeding join point
pjp
)

Modifies the object with KeyValue related information.

private void
getAnnotationsFromInterfaces(ProceedingJoinPoint pjp, Method mostSpecificMethod, List<AnnotatedParameter> annotatedParameters)

public Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver>
public Function<Class<? extends ValueResolver>, ? extends ValueResolver>
private void
mergeAnnotatedParameters(List<AnnotatedParameter> annotatedParameters, List<AnnotatedParameter> annotatedParametersForActualMethod)

private boolean
methodsAreTheSame(Method mostSpecificMethod, Method method)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

annotationClassback to summary
private final Class<? extends Annotation> annotationClass
expressionResolverProviderback to summary
private final Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver> expressionResolverProvider
keyValueConsumerback to summary
private final BiConsumer<KeyValue, T> keyValueConsumer
logback to summary
private static final InternalLogger log
resolverProviderback to summary
private final Function<Class<? extends ValueResolver>, ? extends ValueResolver> resolverProvider
toKeyValueback to summary
private final BiFunction<Annotation, Object, KeyValue> toKeyValue

Constructor Detail

AnnotationHandlerback to summary
public AnnotationHandler(BiConsumer<KeyValue, T> keyValueConsumer, Function<Class<? extends ValueResolver>, ? extends ValueResolver> resolverProvider, Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver> expressionResolverProvider, Class<? extends Annotation> annotation, BiFunction<Annotation, Object, KeyValue> toKeyValue)

Creates a new instance of AnnotationHandler.

Parameters
keyValueConsumer:BiConsumer<KeyValue, T>

consumer that takes a KeyValue and mutates the <T> type

resolverProvider:Function<Class<? extends ValueResolver>, ? extends ValueResolver>

function converting a class extending a ValueResolver to an instance of that class

expressionResolverProvider:Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver>

function converting a class extending a ValueExpressionResolver to an instance of that class

annotation:Class<? extends Annotation>

annotation containing KeyValue related information

toKeyValue:BiFunction<Annotation, Object, KeyValue>

function converting the annotation and the expression or annotation value to a KeyValue

Method Detail

addAnnotatedArgumentsback to summary
private void addAnnotatedArguments(T objectToModify, List<AnnotatedParameter> toBeAdded)
addAnnotatedParametersback to summary
public void addAnnotatedParameters(T objectToModify, ProceedingJoinPoint pjp)

Modifies the object with KeyValue related information.

Parameters
objectToModify:T

object to modify

pjp:ProceedingJoinPoint

proceeding join point

getAnnotationsFromInterfacesback to summary
private void getAnnotationsFromInterfaces(ProceedingJoinPoint pjp, Method mostSpecificMethod, List<AnnotatedParameter> annotatedParameters)
getExpressionResolverProviderback to summary
public Function<Class<? extends ValueExpressionResolver>, ? extends ValueExpressionResolver> getExpressionResolverProvider()
getResolverProviderback to summary
public Function<Class<? extends ValueResolver>, ? extends ValueResolver> getResolverProvider()
mergeAnnotatedParametersback to summary
private void mergeAnnotatedParameters(List<AnnotatedParameter> annotatedParameters, List<AnnotatedParameter> annotatedParametersForActualMethod)
methodsAreTheSameback to summary
private boolean methodsAreTheSame(Method mostSpecificMethod, Method method)