在上篇文章 Spring 注解编程之模式注解 中我们讲到 Spring 模式注解底层原理,依靠 AnnotationMetadata
接口判断是否存在指定元注解。
这篇文章我们主要深入 AnnotationMetadata
,了解其底层原理。
Spring 版本为 5.1.8-RELEASE
AnnotationMetadata 结构
使用 IDEA 生成 AnnotationMetadata
类图,如下:
AnnotationMetadata
存在两个实现类分别为 StandardAnnotationMetadata
与 AnnotationMetadataReadingVisitor
。StandardAnnotationMetadata
主要使用 Java 反射原理获取元数据,而 AnnotationMetadataReadingVisitor
使用 ASM 框架获取元数据。
Java 反射原理大家一般比较熟悉,而 ASM 技术可能会比较陌生,下面主要篇幅介绍 AnnotationMetadataReadingVisitor
实现原理。
基于
AnnotationMetadata#getMetaAnnotationTypes
方法,查看两者实现区别。
AnnotationMetadataReadingVisitor
ASM 是一个通用的 Java 字节码操作和分析框架。它可以用于修改现有类或直接以二进制形式动态生成类。 ASM 虽然提供与其他 Java 字节码框架如 Javassist
,