作者:Leah
这篇文章将为大家详细讲解有关Java中依赖注入框架的元注解是怎么实现的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
写两个自定义注解,一个叫@Virtual元注解,一个叫@Real注解,把@Virtual放在@Real上,把@Real放到一个User类上,看看编译结果,然后用反射从这个类上取@Virtual,看@Real能不能自动引导到@Virtual上。示例代码如下:
@Retention(RetentionPolicy.RUNTIME)
public @interface Virtual {
}
@Virtual
@Retention(RetentionPolicy.RUNTIME)
public @interface Real {
}
@Real
public class User {
编译后用IDE查看class文件,发现@Virtual元注解仍然只标在@Real上,User类上只标有@Real注解,可证明编译器没有为元注解做什么工作。然后反射的结果也是不能从User类拿到@Virtual,可证明JVM runtime也没有为元注解做什么工作。因此@Qualifier的元注解特性极有可能是相关框架自行实现的。
要怎么实现呢?我们可以自己动脑筋想一想。考虑到,Spring框架扫描所有的class文件(之所以要扫描class文件而非class对象,是因为Java不提供遍历所有class对象的功能,使框架不得不重复实现对class文件的解析工作),将其中有相应注解的class转化为BeanDefinition注册到BeanFactory。那么@Qualifier也可以类似地处理,对于扫描到的class,如果它具有@Qualifer注解,并且自身也是注解(实现了java.lang.Annotation interface),就作为一个自定义注解注册到框架里(比如说,QualifierAnnotationRegistry?),如此一来框架就认识所有的包含@Qualifier元注解的自定义注解了,之后要使用就顺理成章了。