Class 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 java.lang.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<java.lang.Object> attributes  
      protected int index  
      protected int interceptorCount  
      protected Interceptor<B,​R>[] interceptors  
      protected static org.slf4j.Logger LOG
      Used by subclasses!
      protected java.lang.Object[] originalParameters  
      protected java.util.Map<java.lang.String,​io.micronaut.core.type.MutableArgumentValue<?>> parameters  
      • 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

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      io.micronaut.core.type.Argument<?>[] getArguments()  
      io.micronaut.core.convert.value.MutableConvertibleValues<java.lang.Object> getAttributes()  
      io.micronaut.core.beans.BeanConstructor<T> getConstructor()  
      InterceptorKind getKind()  
      java.util.Map<java.lang.String,​io.micronaut.core.type.MutableArgumentValue<?>> getParameters()
      Returns the current parameters as a map of mutable argument values.
      java.lang.Object[] getParameterValues()
      Returns the current state of the parameters as an array by parameter index.
      T getTarget()  
      static <T1> T1 instantiate​(io.micronaut.context.BeanResolutionContext resolutionContext, io.micronaut.context.BeanContext beanContext, java.util.List<io.micronaut.context.BeanRegistration<Interceptor<T1,​T1>>> interceptors, io.micronaut.inject.BeanDefinition<T1> definition, io.micronaut.core.beans.BeanConstructor<T1> constructor, int additionalProxyConstructorParametersCount, java.lang.Object... parameters)
      Internal methods that handles the logic of instantiating a bean that has constructor interception applied.
      static <T1> T1 instantiate​(io.micronaut.context.BeanResolutionContext resolutionContext, io.micronaut.context.BeanContext beanContext, java.util.List<io.micronaut.context.BeanRegistration<Interceptor<T1,​T1>>> interceptors, io.micronaut.inject.BeanDefinition<T1> definition, io.micronaut.core.beans.BeanConstructor<T1> constructor, java.lang.Object... parameters)
      Deprecated.
      T invoke​(T instance, java.lang.Object... arguments)  
      T proceed()
      Proceeds with the invocation.
      R proceed​(Interceptor from)
      Proceeds with the invocation using the given interceptor as a position to start from.
      protected static java.util.Collection<io.micronaut.core.annotation.AnnotationValue<?>> resolveInterceptorValues​(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, 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

        getAnnotationValuesByName, getAnnotationValuesByStereotype, getDeclaredAnnotationValuesByName, getValues, hasDeclaredStereotype, isAnnotationPresent, isDeclaredAnnotationPresent
      • Methods inherited from interface io.micronaut.core.annotation.AnnotationMetadataDelegate

        booleanValue, booleanValue, booleanValue, booleanValue, classValue, classValue, classValue, classValue, classValues, classValues, classValues, classValues, 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, getAnnotationValuesByType, getDeclaredAnnotation, getDeclaredAnnotation, getDeclaredAnnotationNameByStereotype, getDeclaredAnnotationNames, getDeclaredAnnotationNamesByStereotype, getDeclaredAnnotationTypeByStereotype, getDeclaredAnnotationTypeByStereotype, getDeclaredAnnotationValuesByType, getDeclaredMetadata, getDeclaredStereotypeAnnotationNames, getDefaultValue, getDefaultValue, getDefaultValue, getDefaultValue, getDefaultValues, getStereotypeAnnotationNames, 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.core.attr.MutableAttributeHolder

        getAttributes, removeAttribute
    • Field Detail

      • LOG

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

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

        protected final java.lang.Object[] originalParameters
      • interceptorCount

        protected final int interceptorCount
      • attributes

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

        protected int index
      • parameters

        protected volatile java.util.Map<java.lang.String,​io.micronaut.core.type.MutableArgumentValue<?>> parameters
    • Method Detail

      • proceed

        public T proceed()
                  throws java.lang.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:
        java.lang.RuntimeException - chain may throw RTE
      • getArguments

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

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

        @Internal
        @NonNull
        @Deprecated
        public static <T1> T1 instantiate​(@NonNull
                                          io.micronaut.context.BeanResolutionContext resolutionContext,
                                          @NonNull
                                          io.micronaut.context.BeanContext beanContext,
                                          @Nullable
                                          java.util.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
                                          java.lang.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 - Th resolved parameters
        Returns:
        The instantiated bean
        Since:
        3.0.0
      • instantiate

        @Internal
        @NonNull
        public static <T1> T1 instantiate​(@NonNull
                                          io.micronaut.context.BeanResolutionContext resolutionContext,
                                          @NonNull
                                          io.micronaut.context.BeanContext beanContext,
                                          @Nullable
                                          java.util.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
                                          java.lang.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 java.lang.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 io.micronaut.core.convert.value.MutableConvertibleValues<java.lang.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 java.util.Map<java.lang.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
                         Interceptor from)
                  throws java.lang.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:
        java.lang.RuntimeException - chain may throw RTE
      • resolveInterceptorValues

        @NonNull
        protected static java.util.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.
        Parameters:
        annotationMetadata - The annotation metadata
        kind - The kind
        Returns:
        The binding
        Since:
        3.3.0