由于前面文章看源码时看到了MetadataReader,本文就简单介绍一下
在spring中会大量用到MetadataReader,spring在实例化单例Bean之前,为什么也能拿到类的元数据信息,包括注解信息等。
原因就是用到了MetadataReader,而MetadataReader使用的是Asm技术 (通过SimpleAnnotationMetadataReadingVisitor可以知道使用的是ASM技术)
既然spring提供了该工具,其实我们也是可以使用的,这在我们的编码中可能会提高很大的效率
例如
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MetaTest {
String value() default "";
}
@Component
@MetaTest(value = "test")
public class UserBean {
}
案例代码
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
类似的spring还提供了AnnotationUtils,也是非常常用。
欢迎关注,学习不迷路!