Package io.micronaut.aop.chain
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 java.lang.Object implements ConstructorInvocationContext<T>
Implementation ofInvocationContextfor constructor interception.- Since:
- 3.0.0
-
-
Field Summary
Fields Modifier and Type Field Description protected io.micronaut.core.convert.value.MutableConvertibleValues<java.lang.Object>attributesprotected intindexprotected intinterceptorCountprotected Interceptor<B,R>[]interceptorsprotected static org.slf4j.LoggerLOGUsed by subclasses!protected java.lang.Object[]originalParametersprotected java.util.Map<java.lang.String,io.micronaut.core.type.MutableArgumentValue<?>>parameters
-
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()InterceptorKindgetKind()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.TgetTarget()static <T1> T1instantiate(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> T1instantiate(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.Tinvoke(T instance, java.lang.Object... arguments)Tproceed()Proceeds with the invocation.Rproceed(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.aop.ConstructorInvocationContext
getDeclaringType, proceed
-
Methods inherited from interface io.micronaut.aop.InvocationContext
getParameters, getParameterValueMap, getParameterValues, setAttribute
-
-
-
-
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
-
getKind
@NonNull public InterceptorKind getKind()
- Specified by:
getKindin interfaceInvocationContext<T,T>- Returns:
- An enum representing the kind of interception that is occurring.
-
getTarget
public T getTarget()
- Specified by:
getTargetin interfaceInvocationContext<T,T>- Returns:
- The target object
-
proceed
public T proceed() throws java.lang.RuntimeException
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 interfaceConstructorInvocationContext<T>- Specified by:
proceedin interfaceInvocationContext<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()
-
getConstructor
@NonNull public io.micronaut.core.beans.BeanConstructor<T> getConstructor()
- Specified by:
getConstructorin interfaceConstructorInvocationContext<T>- Returns:
- The bean type.
-
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 contextbeanContext- The bean contextinterceptors- The interceptors. Can be null and if so should be resolved from the context.definition- The definitionconstructor- The bean constructorparameters- 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 contextbeanContext- The bean contextinterceptors- The interceptors. Can be null and if so should be resolved from the context.definition- The definitionconstructor- The bean constructoradditionalProxyConstructorParametersCount- The additional proxy constructor parameters countparameters- The resolved parameters- Returns:
- The instantiated bean
- Since:
- 3.0.0
-
getParameterValues
@NonNull public java.lang.Object[] 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 io.micronaut.core.convert.value.MutableConvertibleValues<java.lang.Object> getAttributes()
- Specified by:
getAttributesin interfaceio.micronaut.core.attr.AttributeHolder- Specified by:
getAttributesin interfaceio.micronaut.core.attr.MutableAttributeHolder
-
getParameters
@NonNull public java.util.Map<java.lang.String,io.micronaut.core.type.MutableArgumentValue<?>> 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
public R proceed(@NonNull Interceptor from) throws java.lang.RuntimeExceptionDescription 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:
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 metadatakind- The kind- Returns:
- The binding
- Since:
- 3.3.0
-
-