spring中组合注解随处可见,比如springboot的主类上的注解@SpringBootApplication里就包含多个注解,如下图所示
而且这些注解里又包含其他注解,我们知道原生java是不支持直接获取当前类的所实现的注解的注解的,就是说,我们用注解@A标记了注解@B,然后又用@B标记了某个类或者方法,通过反射这个类,是无法知道该类或者方法被@A标记的。那么springboot底层是如何实现的呢?接下来模拟实现过程。
import java.lang.annotation.*;
/**
* 自己构建注解A
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface A {
}
import java.lang.annotation.*;
/**
* 构建注解B,并用@A标记
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@A
public @interface B {
}