Package io.micronaut.aop.chain
Class MethodInterceptorChain<T,R>
java.lang.Object
io.micronaut.aop.chain.InterceptorChain<T,R>
io.micronaut.aop.chain.MethodInterceptorChain<T,R>
- Type Parameters:
T- typeR- result
- All Implemented Interfaces:
InvocationContext<T,,R> MethodInvocationContext<T,,R> io.micronaut.core.annotation.AnnotatedElement,io.micronaut.core.annotation.AnnotationMetadata,io.micronaut.core.annotation.AnnotationMetadataDelegate,io.micronaut.core.annotation.AnnotationMetadataProvider,io.micronaut.core.annotation.AnnotationSource,io.micronaut.core.attr.AttributeHolder,io.micronaut.core.attr.MutableAttributeHolder,io.micronaut.core.naming.Described,io.micronaut.core.naming.Named,io.micronaut.core.type.Executable<T,,R> io.micronaut.inject.ExecutableMethod<T,,R> io.micronaut.inject.MethodReference<T,R>
@Internal
public final class MethodInterceptorChain<T,R>
extends InterceptorChain<T,R>
implements MethodInvocationContext<T,R>
An internal representation of the
Interceptor chain. This class implements MethodInvocationContext and is
consumed by the framework itself and should not be used directly in application code.- Since:
- 1.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected io.micronaut.core.convert.value.MutableConvertibleValues<Object>protected intprotected final intprotected final Interceptor<T,R>[] protected static final org.slf4j.LoggerUsed by subclasses!protected final Object[]Fields inherited from class io.micronaut.aop.chain.InterceptorChain
executionHandle, targetFields inherited from interface io.micronaut.core.annotation.AnnotationMetadata
CLASS_NAME_SUFFIX, EMPTY_METADATA, VALUE_MEMBERFields inherited from interface io.micronaut.core.annotation.AnnotationSource
EMPTY -
Constructor Summary
ConstructorsConstructorDescriptionMethodInterceptorChain(Interceptor<T, R>[] interceptors, T target, io.micronaut.inject.ExecutableMethod<T, R> executionHandle) Constructor for empty parameters.MethodInterceptorChain(Interceptor<T, R>[] interceptors, T target, io.micronaut.inject.ExecutableMethod<T, R> executionHandle, @Nullable InterceptorKind kind) Constructor for empty parameters.MethodInterceptorChain(Interceptor<T, R>[] interceptors, T target, io.micronaut.inject.ExecutableMethod<T, R> executionHandle, Object... originalParameters) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionstatic <T1> T1dispose(@NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull io.micronaut.context.BeanContext beanContext, @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull io.micronaut.inject.ExecutableMethod<T1, T1> preDestroyMethod, T1 bean) Internal method that handles the logic for executingInterceptorKind.PRE_DESTROYinterception.Class<?>[]@NonNull io.micronaut.core.convert.value.MutableConvertibleValues<Object>The underlyingExecutableMethodreference.@NonNull InterceptorKindgetKind()Returns the current parameters as a map of mutable argument values.@NonNull Object[]Returns the current state of the parameters as an array by parameter index.io.micronaut.core.type.ReturnType<R>static <T1> T1initialize(@NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull io.micronaut.context.BeanContext beanContext, @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull io.micronaut.inject.ExecutableMethod<T1, T1> postConstructMethod, T1 bean) Internal method that handles the logic for executingInterceptorKind.POST_CONSTRUCTinterception.booleanbooleanproceed()Proceeds with the invocation.proceed(@NonNull Interceptor from) Proceeds with the invocation using the given interceptor as a position to start from.protected static @NonNull Collection<io.micronaut.core.annotation.AnnotationValue<?>>resolveInterceptorValues(@NonNull io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, @NonNull InterceptorKind kind) Resolve interceptor binding for the given annotation metadata and kind.toString()Methods inherited from class io.micronaut.aop.chain.InterceptorChain
getAnnotationMetadata, getArguments, getTarget, resolveAroundInterceptors, resolveAroundInterceptors, resolveAroundInterceptors, resolveIntroductionInterceptors, resolveIntroductionInterceptors, resolveIntroductionInterceptorsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface io.micronaut.core.annotation.AnnotatedElement
isDeclaredNonNull, isDeclaredNullable, isNonNull, isNullableMethods inherited from interface io.micronaut.core.annotation.AnnotationMetadata
enumValuesSet, enumValuesSet, getValues, hasDeclaredStereotype, hasEvaluatedExpressions, hasStereotypeNonRepeating, isAnnotationPresent, isDeclaredAnnotationPresentMethods inherited from interface io.micronaut.core.annotation.AnnotationMetadataDelegate
booleanValue, booleanValue, booleanValue, booleanValue, classValue, classValue, classValue, classValue, classValues, classValues, classValues, classValues, copyAnnotationMetadata, doubleValue, doubleValue, doubleValue, enumValue, enumValue, enumValue, enumValue, enumValues, enumValues, enumValues, enumValues, findAnnotation, findAnnotation, findDeclaredAnnotation, findDeclaredAnnotation, findRepeatableAnnotation, findRepeatableAnnotation, getAnnotation, getAnnotation, getAnnotationNameByStereotype, getAnnotationNameByStereotype, getAnnotationNames, getAnnotationNamesByStereotype, getAnnotationNamesByStereotype, getAnnotationType, getAnnotationType, getAnnotationTypeByStereotype, getAnnotationTypeByStereotype, getAnnotationTypesByStereotype, getAnnotationTypesByStereotype, getAnnotationTypesByStereotype, getAnnotationValuesByName, getAnnotationValuesByStereotype, getAnnotationValuesByType, getDeclaredAnnotation, getDeclaredAnnotation, getDeclaredAnnotationNameByStereotype, getDeclaredAnnotationNames, getDeclaredAnnotationNamesByStereotype, getDeclaredAnnotationTypeByStereotype, getDeclaredAnnotationTypeByStereotype, getDeclaredAnnotationValuesByName, getDeclaredAnnotationValuesByType, getDeclaredMetadata, getDeclaredStereotypeAnnotationNames, getDefaultValue, getDefaultValue, getDefaultValue, getDefaultValue, getDefaultValues, getStereotypeAnnotationNames, getTargetAnnotationMetadata, getValue, getValue, getValue, getValue, getValue, getValue, getValue, getValue, getValue, getValue, getValue, getValue, getValues, getValues, hasAnnotation, hasAnnotation, hasDeclaredAnnotation, hasDeclaredAnnotation, hasDeclaredStereotype, hasDeclaredStereotype, hasDeclaredStereotype, hasPropertyExpressions, hasSimpleAnnotation, hasSimpleDeclaredAnnotation, hasStereotype, hasStereotype, hasStereotype, hasStereotype, intValue, intValue, intValue, isAnnotationPresent, isDeclaredAnnotationPresent, isEmpty, isFalse, isFalse, isPresent, isPresent, isRepeatableAnnotation, isRepeatableAnnotation, isTrue, isTrue, longValue, longValue, stringValue, stringValue, stringValue, stringValue, stringValues, stringValues, stringValues, stringValues, synthesize, synthesize, synthesizeAll, synthesizeAnnotationsByType, synthesizeDeclared, synthesizeDeclared, synthesizeDeclared, synthesizeDeclaredAnnotationsByTypeMethods inherited from interface io.micronaut.core.annotation.AnnotationMetadataProvider
getAnnotationMetadataMethods inherited from interface io.micronaut.core.attr.AttributeHolder
getAttribute, getAttributeMethods inherited from interface io.micronaut.core.type.Executable
getArgumentsMethods inherited from interface io.micronaut.inject.ExecutableMethod
getDescription, getDescriptionMethods inherited from interface io.micronaut.aop.InvocationContext
getParameters, getParameterValueMap, getParameterValues, getTarget, proceed, setAttributeMethods inherited from interface io.micronaut.inject.MethodReference
getArgumentNames, getArguments, getNameMethods inherited from interface io.micronaut.core.attr.MutableAttributeHolder
getAttributes, removeAttribute
-
Field Details
-
LOG
protected static final org.slf4j.Logger LOGUsed by subclasses! -
interceptors
-
originalParameters
-
interceptorCount
protected final int interceptorCount -
attributes
-
index
protected int index -
parameters
-
-
Constructor Details
-
MethodInterceptorChain
public MethodInterceptorChain(Interceptor<T, R>[] interceptors, T target, io.micronaut.inject.ExecutableMethod<T, R> executionHandle) Constructor for empty parameters.- Parameters:
interceptors- array of interceptorstarget- targetexecutionHandle- executionHandle
-
MethodInterceptorChain
public MethodInterceptorChain(Interceptor<T, R>[] interceptors, T target, io.micronaut.inject.ExecutableMethod<T, R> executionHandle, @Nullable @Nullable InterceptorKind kind) Constructor for empty parameters.- Parameters:
interceptors- array of interceptorstarget- targetexecutionHandle- executionHandlekind- The interception kind
-
MethodInterceptorChain
public MethodInterceptorChain(Interceptor<T, R>[] interceptors, T target, io.micronaut.inject.ExecutableMethod<T, R> executionHandle, Object... originalParameters) Constructor.- Parameters:
interceptors- array of interceptorstarget- targetexecutionHandle- executionHandleoriginalParameters- originalParameters
-
-
Method Details
-
getKind
- Specified by:
getKindin interfaceInvocationContext<T,R> - Returns:
- An enum representing the kind of interception that is occurring.
-
invoke
-
isSuspend
public boolean isSuspend() -
isAbstract
public boolean isAbstract()- Specified by:
isAbstractin interfaceio.micronaut.inject.ExecutableMethod<T,R> - Specified by:
isAbstractin interfaceMethodInvocationContext<T,R>
-
proceed
Description copied from interface:InvocationContextProceeds with the invocation. If this is the last interceptor in the chain then the final implementation method is invoked- Specified by:
proceedin interfaceInvocationContext<T,R> - Overrides:
proceedin classInterceptorChain<T,R> - Returns:
- The return value of the method
- Throws:
RuntimeException- chain may throw RTE
-
getMethodName
-
getArgumentTypes
-
getTargetMethod
-
getReturnType
-
getDeclaringType
- Specified by:
getDeclaringTypein interfaceio.micronaut.core.type.Executable<T,R> - Specified by:
getDeclaringTypein interfaceInvocationContext<T,R> - Specified by:
getDeclaringTypein interfaceMethodInvocationContext<T,R> - Specified by:
getDeclaringTypein interfaceio.micronaut.inject.MethodReference<T,R>
-
toString
-
getExecutableMethod
Description copied from interface:MethodInvocationContextThe underlyingExecutableMethodreference.- Specified by:
getExecutableMethodin interfaceMethodInvocationContext<T,R> - Returns:
- The underlying method reference.
-
initialize
@Internal @NonNull public static <T1> T1 initialize(@NonNull @NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull @NonNull io.micronaut.context.BeanContext beanContext, @NonNull @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull @NonNull io.micronaut.inject.ExecutableMethod<T1, T1> postConstructMethod, @NonNull T1 bean) Internal method that handles the logic for executingInterceptorKind.POST_CONSTRUCTinterception.- Type Parameters:
T1- The bean type- Parameters:
resolutionContext- The resolution contextbeanContext- The bean contextdefinition- The definitionpostConstructMethod- The post construct methodbean- The bean- Returns:
- the bean instance
- Since:
- 3.0.0
-
dispose
@Internal @NonNull public static <T1> T1 dispose(@NonNull @NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull @NonNull io.micronaut.context.BeanContext beanContext, @NonNull @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull @NonNull io.micronaut.inject.ExecutableMethod<T1, T1> preDestroyMethod, @NonNull T1 bean) Internal method that handles the logic for executingInterceptorKind.PRE_DESTROYinterception.- Type Parameters:
T1- The bean type- Parameters:
resolutionContext- The resolution contextbeanContext- The bean contextdefinition- The definitionpreDestroyMethod- The pre destroy methodbean- The bean- Returns:
- the bean instance
- Since:
- 3.0.0
-
getParameterValues
Description copied from interface:InvocationContextReturns the current state of the parameters as an array by parameter index. Note that mutations to the array have no effect. If you wish to mutate the parameters useInvocationContext.getParameters()and theMutableArgumentValueinterface instead- Specified by:
getParameterValuesin interfaceInvocationContext<B,R> - Returns:
- The bound
ArgumentValueinstances
-
getAttributes
@NonNull public @NonNull io.micronaut.core.convert.value.MutableConvertibleValues<Object> getAttributes()- Specified by:
getAttributesin interfaceio.micronaut.core.attr.AttributeHolder- Specified by:
getAttributesin interfaceio.micronaut.core.attr.MutableAttributeHolder
-
getParameters
Description copied from interface:InvocationContextReturns the current parameters as a map of mutable argument values. This method allows mutation of the argument values and is generally more expensive than usingInvocationContext.getParameterValues()andExecutable.getArguments()directly, hence should be used with care.- Specified by:
getParametersin interfaceInvocationContext<B,R> - Returns:
- The bound
ArgumentValueinstances
-
proceed
Description copied from interface:InvocationContextProceeds with the invocation using the given interceptor as a position to start from. Mainly useful forIntroductionadvise where you want to invoke the target multiple times or where you want to repeat the entire chain.- Specified by:
proceedin interfaceInvocationContext<B,R> - Parameters:
from- The interceptor to start from (note: will not be included in the execution)- Returns:
- The return value of the method
- Throws:
RuntimeException- chain may throw RTE
-
resolveInterceptorValues
@NonNull protected static @NonNull Collection<io.micronaut.core.annotation.AnnotationValue<?>> resolveInterceptorValues(@NonNull @NonNull io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, @NonNull @NonNull InterceptorKind kind) Resolve interceptor binding for the given annotation metadata and kind.- Parameters:
annotationMetadata- The annotation metadatakind- The kind- Returns:
- The binding
- Since:
- 3.3.0
-