在上一篇文章中,我们提到了 Spring 的四种注解编程模型:元注解、模式注解、组合注解、属性别名和覆盖。为了支持这四种注解编程模型,Spring 提供了 AnnotationUtils 和 AnnotatedElementUtils 工具类。注意,Spring-5.2.x 重构了这部分的 API,本文以 Spring-5.2.2 版本为基础进行分析。

  1. Spring 注解提供了那些功能?

    1. 功能说明

    Spring Annotation 位于 spring-core 工程中,是注解驱动的基石。其中最核心的类如下:
  • 核心组件(API) - org.springframework.core.annotation.AnnotationUtils

    1. org.springframework.core.annotation.AnnotatedElementUtils
  • 注解查找 - org.springframework.core.annotation.AnnotationsScanner

    • org.springframework.core.annotation.MergedAnnotations.SearchStrategy
    • org.springframework.core.annotation.AnnotationFilter
    • org.springframework.core.annotation.AnnotationsProcessor
    • org.springframework.core.annotation.RepeatableContainers
  • 注解解析(属性别名和覆盖解析) - org.springframework.core.annotation.MergedAnnotation
    • org.springframework.core.annotation.AnnotationTypeMapping
  • 注解代理

    • org.springframework.core.annotation.SynthesizedMergedAnnotationInvocationHandler

      1.1 AnnotationUtils

      Spring 提供 AnnotationUtils AnnotationElementUtils 用于简化操作。
  • AnnotationUtils:解决元注解查找继承查找以及注解别名三大功能,但不能解决元注解属性覆盖的问题。其中注解别名包括显示别名、隐式别名、传递的隐式别名。

  • AnnotatedElementUtils:在AnnotationUtils 的基础上,为 Spring 的元注解编程模型定义了公共 API,并支持注解属性覆盖。如果不需要支持注解属性覆盖,请考虑使用 AnnotationUtils。

    1.1.1 元注解查找

    1.1.2 继承查找

    1.1.3 注解别名

    1.2 AnnotatedElementUtils

    1.2.1 属性覆盖

    Spring 注解驱动原理 - 图1 Spring 注解驱动原理 - 图2Spring注解属性别名
    Spring注解编程基石(一)