曹工说Spring Boot源码(23)-- ASM又立功了,Spring原来是这么递归获取注解的元注解的 (5)

获取注解的元注解,比如,获取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 Boot源码(23)-- ASM又立功了,Spring原来是这么递归获取注解的元注解的

总结

这个就是spring 注解驱动的基石,实际上,spring不是一开始就这么完备的,在之前的版本,并不支持递归获取,spring也是慢慢一步一步发展壮大的。

感谢spring赏饭吃!

下一讲,会讲解component-scan扫描bean时,怎么扫描类上的注解的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdpyp.html