Interface AnnotationSource

All Known Subinterfaces:
AbstractAnnotationMetadataBuilder.CachedAnnotationMetadata, AdvisedBeanType<T>, AnnotatedElement, AnnotationElement, AnnotationMetadata, AnnotationMetadataDelegate, AnnotationMetadataProvider, Argument<T>, ArgumentConversionContext<T>, ArgumentInjectionPoint<B,T>, ArgumentValue<V>, ArrayableClassElement, BeanConfiguration, BeanConstructor<T>, BeanConstructorElement, BeanDefinition<T>, BeanDefinitionMethodReference<T,R>, BeanDefinitionReference<T>, BeanElement, BeanElementBuilder, BeanFieldElement, BeanInfo<T>, BeanIntrospection<T>, BeanIntrospectionReference<T>, BeanMethod<B,T>, BeanMethodElement, BeanParameterElement, BeanProperty<B,T>, BeanReadProperty<B,T>, BeanType<T>, BeanWrapper<T>, BeanWriteProperty<B,T>, BoundExecutable<T,R>, CallableInjectionPoint<T>, ClassElement, ConfigurableElement, ConstructorElement, ConstructorInjectionPoint<T>, ConstructorInvocationContext<T>, ConversionContext, DelegatingBeanDefinition<T>, DelegatingExecutableMethod<T,R>, DisposableBeanDefinition<T>, Element, ElementAnnotationMetadata, ElementMutableAnnotationMetadataDelegate<R>, EnumBeanIntrospection<E>, EnumBeanIntrospection.EnumConstant<E>, EnumConstantElement, EnumElement, ErrorRouteInfo<T,R>, Executable<T,R>, ExecutableMethod<T,R>, ExecutionHandle<T,R>, FieldElement, FieldInjectionPoint<B,T>, FilterRoute, GenericElement, GenericPlaceholder<T>, GenericPlaceholderElement, GraalReflectionConfigurer, HttpFilterResolver.FilterEntry, ImmutableArgumentConversionContext<T>, InitializingBeanDefinition<T>, InjectableBeanDefinition<T>, InjectableElement, InjectionPoint<T>, InstantiatableBeanDefinition<T>, InvocationContext<T,R>, KotlinParameterElement, MemberElement, MethodBasedRouteInfo<T,R>, MethodBasedRouteMatch<T,R>, MethodElement, MethodExecutionHandle<T,R>, MethodInjectionPoint<B,T>, MethodInvocationContext<T,R>, MethodReference<T,R>, MutableAnnotationMetadataDelegate<R>, MutableArgumentValue<V>, PackageElement, ParameterElement, ParametrizedInstantiatableBeanDefinition<T>, PropertyElement, ProxyBeanDefinition<T>, QualifiedBeanType<T>, ReturnType<T>, RouteInfo<R>, RouteMatch<R>, RuntimeBeanDefinition<T>, StatusRouteInfo<T,R>, TypedElement, TypeInformation<T>, UnsafeBeanInstantiationIntrospection<T>, UnsafeBeanProperty<B,T>, UnsafeBeanReadProperty<B,T>, UnsafeBeanWriteProperty<B,T>, UnsafeExecutable<T,R>, UnsafeExecutionHandle<T,R>, UriRouteInfo<T,R>, UriRouteMatch<T,R>, ValidatedBeanDefinition<T>, WildcardElement
All Known Implementing Classes:
AbstractAnnotationElement, AbstractBeanConfiguration, AbstractBeanConstructor, AbstractBeanDefinitionBeanConstructor, AbstractBeanDefinitionBuilder, AbstractBeanIntrospectionReference, AbstractBeanMethod, AbstractBeanProperty, AbstractBeanResolutionContext.AnnotationSegment, AbstractBeanResolutionContext.ConstructorArgumentSegment, AbstractBeanResolutionContext.ConstructorSegment, AbstractBeanResolutionContext.EventListenerSegment, AbstractBeanResolutionContext.FieldSegment, AbstractBeanResolutionContext.MethodArgumentSegment, AbstractBeanResolutionContext.MethodSegment, AbstractElementAnnotationMetadata, AbstractElementAnnotationMetadataFactory.AbstractElementAnnotationMetadata, AbstractElementAnnotationMetadataFactory.MutableElementAnnotationMetadata, AbstractEnumBeanIntrospectionAndReference, AbstractEnumBeanIntrospectionAndReference.EnumConstantDynamicRef, AbstractEnumBeanIntrospectionAndReference.EnumConstantRef, AbstractEnvironmentAnnotationMetadata, AbstractExecutableBeanMethod, AbstractExecutableMethod, AbstractGroovyElement, AbstractInitializableBeanDefinition, AbstractInitializableBeanDefinitionAndReference, AbstractInitializableBeanDefinitionReference, AbstractInitializableBeanIntrospection, AbstractInitializableBeanIntrospectionAndReference, AbstractJavaElement, AbstractJavaMemberElement, AbstractMutableAnnotationMetadata, AbstractProviderDefinition, AbstractTypeAwareJavaElement, AnnotationMetadataHierarchy, AnnotationMetadataReference, ApplicationEventPublisherFactory, ArgumentBeanType, BeanDefinitionWriter, BeanProviderDefinition, BeanRegistration, ClientFilterResolutionContext, ConstructorInterceptorChain, DefaultAnnotationMetadata, DefaultArgument, DefaultErrorRouteInfo, DefaultRequestMatcher, DefaultRouteInfo, DefaultStatusRouteInfo, DefaultUriRouteMatch, DefaultUrlRouteInfo, DisabledBean, EvaluatedAnnotationMetadata, GenericArgument, GenericPlaceholderElementAnnotationMetadata, GroovyClassElement, GroovyConstructorElement, GroovyEnumConstantElement, GroovyFieldElement, GroovyMethodElement, GroovyPackageElement, GroovyParameterElement, InterceptorChain, InterceptorRegistryBean, JakartaProviderBeanDefinition, JavaClassElement, JavaMethodElement, JavaPackageElement, JavaxProviderBeanDefinition, MappingAnnotationMetadataDelegate, MethodElementAnnotationMetadata, MethodInterceptorChain, MutableAnnotationMetadata, MutatedMethodElementAnnotationMetadata, PrimitiveElement, PropertyElementAnnotationMetadata, WildcardElementAnnotationMetadata

public interface AnnotationSource

A source of annotations. This API provides an alternative to Java's AnnotatedElement that uses the compile time produced data from Micronaut. This is the parent interface of the AnnotationMetadata which provides event more methods to read annotations values and compute Repeatable annotations.

Note that this interface also includes methods such as synthesize(Class) that allows materializing an instance of an annotation by producing a runtime proxy. These methods are a last resort if no other option is possible and should generally be avoided as they require the use of runtime reflection and proxying which hurts performance and memory consumption.

Since:
1.0
Author:
Graeme Rocher
See Also:
  • Field Details

  • Method Details

    • synthesize

      default <T extends Annotation> @Nullable T synthesize(Class<T> annotationClass)
      Synthesizes a new annotation from the metadata for the given annotation type. This method works by creating a runtime proxy of the annotation interface and should be avoided in favour of direct use of the annotation metadata and only used for unique cases that require integrating third party libraries.
      Type Parameters:
      T - The annotation generic type
      Parameters:
      annotationClass - The annotation class
      Returns:
      The annotation or null if it doesn't exist
    • synthesize

      default <T extends Annotation> @Nullable T synthesize(Class<T> annotationClass, String sourceAnnotation)
      Synthesizes a new annotation for the given annotation type using the member values of the given source annotation.

      This method allows supporting synthesizing annotations that have been renamed, for example a jakarta.inject.Named annotation an be synthesized from the metadata of the a jakarta.inject.Named annotation.

      Type Parameters:
      T - The annotation generic type
      Parameters:
      annotationClass - The annotation class
      sourceAnnotation - The source annotation that provides the member values
      Returns:
      The annotation or null if it doesn't exist
      Since:
      3.0.0
    • synthesizeDeclared

      default <T extends Annotation> @Nullable T synthesizeDeclared(Class<T> annotationClass, String sourceAnnotation)
      Synthesizes a new annotation declared for the given annotation type using the member values of the given source annotation.

      This method allows supporting synthesizing annotations that have been renamed, for example a jakarta.inject.Named annotation an be synthesized from the metadata of the a jakarta.inject.Named annotation.

      Type Parameters:
      T - The annotation generic type
      Parameters:
      annotationClass - The annotation class
      sourceAnnotation - The source annotation that provides the member values
      Returns:
      The annotation or null if it doesn't exist
      Since:
      3.0.0
    • synthesizeDeclared

      default <T extends Annotation> @Nullable T synthesizeDeclared(Class<T> annotationClass)
      Synthesizes a new annotation from the metadata for the given annotation type. This method works by creating a runtime proxy of the annotation interface and should be avoided in favour of direct use of the annotation metadata and only used for unique cases that require integrating third party libraries.

      This method ignores inherited annotations. (Returns null if no annotations are directly present on this element.)

      Type Parameters:
      T - The annotation generic type
      Parameters:
      annotationClass - The annotation class
      Returns:
      The annotation or null if it doesn't exist
    • synthesizeAll

      default Annotation[] synthesizeAll()
      Synthesizes a new annotations from the metadata. This method works by creating a runtime proxy of the annotation interface and should be avoided in favour of direct use of the annotation metadata and only used for unique cases that require integrating third party libraries.
      Returns:
      All the annotations
    • synthesizeDeclared

      default Annotation[] synthesizeDeclared()
      Synthesizes a new annotations from the metadata. This method works by creating a runtime proxy of the annotation interface and should be avoided in favour of direct use of the annotation metadata and only used for unique cases that require integrating third party libraries.
      Returns:
      All declared annotations
    • synthesizeAnnotationsByType

      default <T extends Annotation> T[] synthesizeAnnotationsByType(Class<T> annotationClass)
      Synthesizes a new annotations from the metadata for the given type. This method works by creating a runtime proxy of the annotation interface and should be avoided in favour of direct use of the annotation metadata and only used for unique cases that require integrating third party libraries.
      Type Parameters:
      T - The annotation generic type
      Parameters:
      annotationClass - The annotation type
      Returns:
      All annotations by the given type
    • synthesizeDeclaredAnnotationsByType

      default <T extends Annotation> T[] synthesizeDeclaredAnnotationsByType(Class<T> annotationClass)
      Synthesizes a new annotations from the metadata for the given type. This method works by creating a runtime proxy of the annotation interface and should be avoided in favour of direct use of the annotation metadata and only used for unique cases that require integrating third party libraries.
      Type Parameters:
      T - The annotation generic type
      Parameters:
      annotationClass - The annotation type
      Returns:
      Declared annotations by the given type
    • findAnnotation

      default <T extends Annotation> Optional<AnnotationValue<T>> findAnnotation(String annotation)
      Find an AnnotationValue for the given annotation name.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotation - The annotation name
      Returns:
      A AnnotationValue instance
    • findAnnotation

      default <T extends Annotation> Optional<AnnotationValue<T>> findAnnotation(Class<T> annotationClass)
      Find an AnnotationValue for the given annotation type.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotationClass - The annotation
      Returns:
      A AnnotationValue instance
    • findDeclaredAnnotation

      default <T extends Annotation> Optional<AnnotationValue<T>> findDeclaredAnnotation(String annotation)
      Get all values for the given annotation that are directly declared on the annotated element.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotation - The annotation name
      Returns:
      A AnnotationValue instance
    • findDeclaredAnnotation

      default <T extends Annotation> Optional<AnnotationValue<T>> findDeclaredAnnotation(Class<T> annotationClass)
      Get all values for the given annotation that are directly declared on the annotated element.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotationClass - The annotation name
      Returns:
      A AnnotationValue instance
    • getAnnotation

      default <T extends Annotation> @Nullable AnnotationValue<T> getAnnotation(String annotation)
      Find an AnnotationValue for the given annotation name.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotation - The annotation name
      Returns:
      A AnnotationValue instance or null
    • getAnnotation

      default <T extends Annotation> @Nullable AnnotationValue<T> getAnnotation(Class<T> annotationClass)
      Find an AnnotationValue for the given annotation name.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotationClass - The annotation name
      Returns:
      A AnnotationValue instance or null
    • getDeclaredAnnotation

      default <T extends Annotation> @Nullable AnnotationValue<T> getDeclaredAnnotation(String annotation)
      Get all values for the given annotation that are directly declared on the annotated element.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotation - The annotation name
      Returns:
      A AnnotationValue instance
    • getDeclaredAnnotation

      default <T extends Annotation> @Nullable AnnotationValue<T> getDeclaredAnnotation(Class<T> annotationClass)
      Find an AnnotationValue for the given annotation name.
      Type Parameters:
      T - The annotation type
      Parameters:
      annotationClass - The annotation name
      Returns:
      A AnnotationValue instance or null
    • isAnnotationPresent

      default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
      Return whether an annotation is present.
      Parameters:
      annotationClass - The annotation class
      Returns:
      True if it is
    • isDeclaredAnnotationPresent

      default boolean isDeclaredAnnotationPresent(Class<? extends Annotation> annotationClass)
      Variation of isAnnotationPresent(Class) for declared annotations.
      Parameters:
      annotationClass - The annotation class
      Returns:
      True if it is
    • isAnnotationPresent

      default boolean isAnnotationPresent(String annotationName)
      Return whether an annotation is present.
      Parameters:
      annotationName - The annotation name
      Returns:
      True if it is
    • isDeclaredAnnotationPresent

      default boolean isDeclaredAnnotationPresent(String annotationName)
      Variation of isAnnotationPresent(String) for declared annotations.
      Parameters:
      annotationName - The annotation name
      Returns:
      True if it is
    • getTargetAnnotationMetadata

      default AnnotationSource getTargetAnnotationMetadata()
      Unwraps possible delegate or provider.
      Returns:
      unwrapped
      Since:
      4.0.0