Class ConstructorInterceptorChain<T>

java.lang.Object
io.micronaut.aop.chain.ConstructorInterceptorChain<T>
Type Parameters:
T - The bean type
All Implemented Interfaces:
ConstructorInvocationContext<T>, InvocationContext<T,T>, 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<T,T>

@Internal public final class ConstructorInterceptorChain<T> extends Object implements ConstructorInvocationContext<T>
Implementation of InvocationContext for constructor interception.
Since:
3.0.0
  • Field Summary

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

    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
  • Method Summary

    Modifier and Type
    Method
    Description
    @NonNull io.micronaut.core.type.Argument<?>[]
     
    @NonNull io.micronaut.core.convert.value.MutableConvertibleValues<Object>
     
    @NonNull io.micronaut.core.beans.BeanConstructor<T>
     
     
    @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.
     
    static <T1> T1
    instantiate(@NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull io.micronaut.context.BeanContext beanContext, @Nullable List<io.micronaut.context.BeanRegistration<Interceptor<T1,T1>>> interceptors, @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull io.micronaut.core.beans.BeanConstructor<T1> constructor, int additionalProxyConstructorParametersCount, @NonNull Object... parameters)
    Internal methods that handles the logic of instantiating a bean that has constructor interception applied.
    static <T1> T1
    instantiate(@NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull io.micronaut.context.BeanContext beanContext, @Nullable List<io.micronaut.context.BeanRegistration<Interceptor<T1,T1>>> interceptors, @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull io.micronaut.core.beans.BeanConstructor<T1> constructor, @NonNull Object... parameters)
    Deprecated.
    invoke(T 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.
    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.

    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.annotation.AnnotationMetadataProvider

    getAnnotationMetadata

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

    getAttribute, getAttribute

    Methods inherited from interface io.micronaut.aop.ConstructorInvocationContext

    getDeclaringType, proceed

    Methods inherited from interface io.micronaut.aop.InvocationContext

    getParameters, getParameterValueMap, getParameterValues, setAttribute

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

    getAttributes, removeAttribute
  • Field Details

    • LOG

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

      protected final Interceptor<T,T>[] 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
  • Method Details

    • getKind

      @NonNull public @NonNull InterceptorKind getKind()
      Specified by:
      getKind in interface InvocationContext<T,T>
      Returns:
      An enum representing the kind of interception that is occurring.
    • getTarget

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

      @NonNull public T 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 ConstructorInvocationContext<T>
      Specified by:
      proceed in interface InvocationContext<T,T>
      Returns:
      The return value of the method
      Throws:
      RuntimeException - chain may throw RTE
    • getArguments

      @NonNull public @NonNull io.micronaut.core.type.Argument<?>[] getArguments()
      Specified by:
      getArguments in interface io.micronaut.core.type.Executable<T,T>
    • invoke

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

      @NonNull public @NonNull io.micronaut.core.beans.BeanConstructor<T> getConstructor()
      Specified by:
      getConstructor in interface ConstructorInvocationContext<T>
      Returns:
      The bean type.
    • instantiate

      @Internal @NonNull @Deprecated public static <T1> T1 instantiate(@NonNull @NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull @NonNull io.micronaut.context.BeanContext beanContext, @Nullable @Nullable List<io.micronaut.context.BeanRegistration<Interceptor<T1,T1>>> interceptors, @NonNull @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull @NonNull io.micronaut.core.beans.BeanConstructor<T1> constructor, @NonNull @NonNull Object... parameters)
      Deprecated.
      Internal methods that handles the logic of instantiating a bean that has constructor interception applied.
      Type Parameters:
      T1 - The bean type
      Parameters:
      resolutionContext - The resolution context
      beanContext - The bean context
      interceptors - The interceptors. Can be null and if so should be resolved from the context.
      definition - The definition
      constructor - The bean constructor
      parameters - The resolved parameters
      Returns:
      The instantiated bean
      Since:
      3.0.0
    • instantiate

      @Internal @NonNull public static <T1> T1 instantiate(@NonNull @NonNull io.micronaut.context.BeanResolutionContext resolutionContext, @NonNull @NonNull io.micronaut.context.BeanContext beanContext, @Nullable @Nullable List<io.micronaut.context.BeanRegistration<Interceptor<T1,T1>>> interceptors, @NonNull @NonNull io.micronaut.inject.BeanDefinition<T1> definition, @NonNull @NonNull io.micronaut.core.beans.BeanConstructor<T1> constructor, int additionalProxyConstructorParametersCount, @NonNull @NonNull Object... parameters)
      Internal methods that handles the logic of instantiating a bean that has constructor interception applied.
      Type Parameters:
      T1 - The bean type
      Parameters:
      resolutionContext - The resolution context
      beanContext - The bean context
      interceptors - The interceptors. Can be null and if so should be resolved from the context.
      definition - The definition
      constructor - The bean constructor
      additionalProxyConstructorParametersCount - The additional proxy constructor parameters count
      parameters - The resolved parameters
      Returns:
      The instantiated bean
      Since:
      3.0.0
    • 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 T 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