Class InterceptorChain<B,R>

java.lang.Object
io.micronaut.aop.chain.InterceptorChain<B,R>
Type Parameters:
B - The declaring type
R - The result of the method call
All Implemented Interfaces:
InvocationContext<B,R>, 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.type.Executable<B,R>
Direct Known Subclasses:
MethodInterceptorChain

@Internal public class InterceptorChain<B,R> extends Object implements InvocationContext<B,R>
An internal representation of the Interceptor chain. This class implements InvocationContext and is consumed by the framework itself and should not be used directly in application code.
Since:
1.0
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected io.micronaut.core.convert.value.MutableConvertibleValues<Object>
     
    protected final io.micronaut.inject.ExecutableMethod<B,R>
     
    protected int
     
    protected final int
     
    protected final Interceptor<B,R>[]
     
    protected static final org.slf4j.Logger
    Used by subclasses!
    protected final Object[]
     
    protected Map<String,io.micronaut.core.type.MutableArgumentValue<?>>
     
    protected final B
     

    Fields inherited from interface io.micronaut.core.annotation.AnnotationMetadata

    CLASS_NAME_SUFFIX, EMPTY_METADATA, VALUE_MEMBER

    Fields inherited from interface io.micronaut.core.annotation.AnnotationSource

    EMPTY
  • Constructor Summary

    Constructors
    Constructor
    Description
    InterceptorChain(Interceptor<B,R>[] interceptors, B target, io.micronaut.inject.ExecutableMethod<B,R> method, Object... originalParameters)
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    @NonNull io.micronaut.core.annotation.AnnotationMetadata
     
    io.micronaut.core.type.Argument[]
     
    @NonNull io.micronaut.core.convert.value.MutableConvertibleValues<Object>
     
    @NonNull Map<String,io.micronaut.core.type.MutableArgumentValue<?>>
    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.
     
    invoke(B instance, Object... arguments)
     
    Proceeds with the invocation.
    proceed(@NonNull Interceptor from)
    Proceeds with the invocation using the given interceptor as a position to start from.
    static Interceptor[]
    resolveAroundInterceptors(@Nullable io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<?,?> method, Interceptor... interceptors)
    static <T> Interceptor<T,?>[]
    resolveAroundInterceptors(InterceptorRegistry interceptorRegistry, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
    Resolves the Around interceptors for a method.
    static <T> Interceptor<T,?>[]
    resolveAroundInterceptors(io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
    Resolves the Around interceptors for a method.
    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.
    static Interceptor[]
    resolveIntroductionInterceptors(@Nullable io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<?,?> method, Interceptor... interceptors)
    Deprecated.
    static <T> Interceptor<T,?>[]
    resolveIntroductionInterceptors(InterceptorRegistry interceptorRegistry, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
    Resolves the Introduction interceptors for a method.
    static <T> Interceptor<T,?>[]
    resolveIntroductionInterceptors(io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
    Resolves the Introduction interceptors for a method.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface io.micronaut.core.annotation.AnnotationMetadata

    enumValuesSet, enumValuesSet, getValues, hasDeclaredStereotype, hasEvaluatedExpressions, hasStereotypeNonRepeating, isAnnotationPresent, isDeclaredAnnotationPresent

    Methods 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, synthesizeDeclaredAnnotationsByType

    Methods inherited from interface io.micronaut.core.attr.AttributeHolder

    getAttribute, getAttribute

    Methods inherited from interface io.micronaut.core.attr.MutableAttributeHolder

    getAttributes, removeAttribute
  • Field Details

    • target

      protected final B target
    • executionHandle

      protected final io.micronaut.inject.ExecutableMethod<B,R> executionHandle
    • LOG

      protected static final org.slf4j.Logger LOG
      Used by subclasses!
    • interceptors

      protected final Interceptor<B,R>[] interceptors
    • originalParameters

      protected final Object[] originalParameters
    • interceptorCount

      protected final int interceptorCount
    • attributes

      protected volatile io.micronaut.core.convert.value.MutableConvertibleValues<Object> attributes
    • index

      protected int index
    • parameters

      protected volatile Map<String,io.micronaut.core.type.MutableArgumentValue<?>> parameters
  • Constructor Details

    • InterceptorChain

      public InterceptorChain(Interceptor<B,R>[] interceptors, B target, io.micronaut.inject.ExecutableMethod<B,R> method, Object... originalParameters)
      Constructor.
      Parameters:
      interceptors - array of interceptors
      target - target type
      method - result method
      originalParameters - parameters
  • Method Details

    • getAnnotationMetadata

      @NonNull public @NonNull io.micronaut.core.annotation.AnnotationMetadata getAnnotationMetadata()
      Specified by:
      getAnnotationMetadata in interface io.micronaut.core.annotation.AnnotationMetadataProvider
    • getArguments

      public io.micronaut.core.type.Argument[] getArguments()
      Specified by:
      getArguments in interface io.micronaut.core.type.Executable<B,R>
    • invoke

      public R invoke(B instance, Object... arguments)
      Specified by:
      invoke in interface io.micronaut.core.type.Executable<B,R>
    • getTarget

      @NonNull public B getTarget()
      Specified by:
      getTarget in interface InvocationContext<B,R>
      Returns:
      The target object
    • proceed

      public R proceed() throws RuntimeException
      Description copied from interface: InvocationContext
      Proceeds with the invocation. If this is the last interceptor in the chain then the final implementation method is invoked
      Specified by:
      proceed in interface InvocationContext<B,R>
      Returns:
      The return value of the method
      Throws:
      RuntimeException - chain may throw RTE
    • resolveAroundInterceptors

      @Internal public static <T> Interceptor<T,?>[] resolveAroundInterceptors(io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
      Resolves the Around interceptors for a method.
      Type Parameters:
      T - The intercepted type
      Parameters:
      beanContext - bean context passed in
      method - The method
      interceptors - The array of interceptors
      Returns:
      The filtered array of interceptors
    • resolveAroundInterceptors

      @Internal public static <T> Interceptor<T,?>[] resolveAroundInterceptors(InterceptorRegistry interceptorRegistry, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
      Resolves the Around interceptors for a method.
      Type Parameters:
      T - The intercepted type
      Parameters:
      interceptorRegistry - the interceptor registry
      method - The method
      interceptors - The array of interceptors
      Returns:
      The filtered array of interceptors
      Since:
      4.3.0
    • resolveIntroductionInterceptors

      @Internal public static <T> Interceptor<T,?>[] resolveIntroductionInterceptors(io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
      Resolves the Introduction interceptors for a method.
      Type Parameters:
      T - The intercepted type
      Parameters:
      beanContext - bean context passed in
      method - The method
      interceptors - The array of interceptors
      Returns:
      The filtered array of interceptors
      Since:
      4.3.0
    • resolveIntroductionInterceptors

      @Internal public static <T> Interceptor<T,?>[] resolveIntroductionInterceptors(InterceptorRegistry interceptorRegistry, io.micronaut.inject.ExecutableMethod<T,?> method, List<io.micronaut.context.BeanRegistration<Interceptor<T,?>>> interceptors)
      Resolves the Introduction interceptors for a method.
      Type Parameters:
      T - The intercepted type
      Parameters:
      interceptorRegistry - the interceptor registry
      method - The method
      interceptors - The array of interceptors
      Returns:
      The filtered array of interceptors
      Since:
      4.3.0
    • resolveAroundInterceptors

      @Internal @Deprecated public static Interceptor[] resolveAroundInterceptors(@Nullable @Nullable io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<?,?> method, Interceptor... interceptors)
      Resolves the Around interceptors for a method.
      Parameters:
      beanContext - bean context passed in
      method - The method
      interceptors - The array of interceptors
      Returns:
      The filtered array of interceptors
    • resolveIntroductionInterceptors

      @Internal @Deprecated public static Interceptor[] resolveIntroductionInterceptors(@Nullable @Nullable io.micronaut.context.BeanContext beanContext, io.micronaut.inject.ExecutableMethod<?,?> method, Interceptor... interceptors)
      Deprecated.
      Resolves the interceptors for a method for Introduction advise. For Introduction advise any Around advise interceptors are applied first
      Parameters:
      beanContext - Bean Context
      method - The method
      interceptors - The array of interceptors
      Returns:
      The filtered array of interceptors
    • getParameterValues

      @NonNull public @NonNull Object[] getParameterValues()
      Description copied from interface: InvocationContext
      Returns 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 use InvocationContext.getParameters() and the MutableArgumentValue interface instead
      Specified by:
      getParameterValues in interface InvocationContext<B,R>
      Returns:
      The bound ArgumentValue instances
    • getAttributes

      @NonNull public @NonNull io.micronaut.core.convert.value.MutableConvertibleValues<Object> getAttributes()
      Specified by:
      getAttributes in interface io.micronaut.core.attr.AttributeHolder
      Specified by:
      getAttributes in interface io.micronaut.core.attr.MutableAttributeHolder
    • getParameters

      @NonNull public @NonNull Map<String,io.micronaut.core.type.MutableArgumentValue<?>> getParameters()
      Description copied from interface: InvocationContext
      Returns the current parameters as a map of mutable argument values. This method allows mutation of the argument values and is generally more expensive than using InvocationContext.getParameterValues() and Executable.getArguments() directly, hence should be used with care.
      Specified by:
      getParameters in interface InvocationContext<B,R>
      Returns:
      The bound ArgumentValue instances
    • proceed

      public R proceed(@NonNull @NonNull Interceptor from) throws RuntimeException
      Description copied from interface: InvocationContext
      Proceeds with the invocation using the given interceptor as a position to start from. Mainly useful for Introduction advise where you want to invoke the target multiple times or where you want to repeat the entire chain.
      Specified by:
      proceed in interface InvocationContext<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 metadata
      kind - The kind
      Returns:
      The binding
      Since:
      3.3.0