• 4. Spring获取元数据信息MetadataReader


    简介

    由于前面文章看源码时看到了MetadataReader,本文就简单介绍一下

    在spring中会大量用到MetadataReader,spring在实例化单例Bean之前,为什么也能拿到类的元数据信息,包括注解信息等。

    原因就是用到了MetadataReader,而MetadataReader使用的是Asm技术 (通过SimpleAnnotationMetadataReadingVisitor可以知道使用的是ASM技术)

    使用

    既然spring提供了该工具,其实我们也是可以使用的,这在我们的编码中可能会提高很大的效率

    例如

    1. 定义一个注解
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface MetaTest {
    	String value() default "";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. UserBean使用注解
    @Component
    @MetaTest(value = "test")
    public class UserBean {
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 获取类的元数据信息

    案例代码

    private static void testMeta() {
        SimpleMetadataReaderFactory readerFactory = new SimpleMetadataReaderFactory();
        try {
            MetadataReader metadataReader = readerFactory.getMetadataReader(UserBean.class.getName());
            AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
            ClassMetadata classMetadata = metadataReader.getClassMetadata();
            System.out.println(annotationMetadata.getAnnotationAttributes(Component.class.getName()));
            System.out.println(annotationMetadata.getAnnotationAttributes(MetaTest.class.getName()));
            System.out.println(classMetadata.getClassName());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    
    输出
    {value=}
    {value=test}
    com.shura.beans.UserBean
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    类似的spring还提供了AnnotationUtils,也是非常常用。


    欢迎关注,学习不迷路!

  • 相关阅读:
    Qt打包程序
    Posix API 和网络协议栈
    【React】第十五部分 React-Router6
    java.lang.Enum类下compareTo()方法起什么作用呢?
    Linux应用程序对异步通知的处理
    Go核心编程(四) -- 内存模型
    机器学习中参数优化调试方法
    Linux常用命令——clear命令
    大数据MapReduce是什么
    离散数学 --- 树 --- 无向树,生成树与最小生成树
  • 原文地址:https://blog.csdn.net/weixin_44412085/article/details/134467966