获取注解的元注解,比如,获取controller注解上的注解;这里就能取到Target、Retention、Documented、Component
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller
循环处理这些元注解,因为这些元注解上,可能还有元注解,比如,在处理Target时,发现其上还有Documented、Retention、Target几个注解,看到了吧,target注解还注解了target,在这块的递归处理时,很容易栈溢出。
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target {递归处理上面的这些注解
具体的处理,基本就是这样。文章开头的递归,就是摘抄的这里的代码。
经过最终的处理后,可以看看最后的效果,这里截取的就是AnnotationMetadataReadingVisitor这个对象:
总结这个就是spring 注解驱动的基石,实际上,spring不是一开始就这么完备的,在之前的版本,并不支持递归获取,spring也是慢慢一步一步发展壮大的。
感谢spring赏饭吃!
下一讲,会讲解component-scan扫描bean时,怎么扫描类上的注解的。