• 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,也是非常常用。


    欢迎关注,学习不迷路!

  • 相关阅读:
    数据在线迁移
    黑群晖 7.0 安装
    生成可信任的https证书-use
    整理MyBatis 2022-8-11
    数据治理市场:亿信华辰朝左,华傲数据向右
    绿色荧光素标记Galectin-3抑制剂,FITC-Galectin-3
    Metasploit使用指南
    《动手学深度学习 Pytorch版》 10.7 Transformer
    Google Sign In error 12500
    链表中LinkList L与LinkList *L( & * L.elem L->elem)
  • 原文地址:https://blog.csdn.net/weixin_44412085/article/details/134467966