SpringBoot中的@Inherited注解详解
作者:sunnyday0426
这篇文章主要介绍了SpringBoot中的@Inherited注解详解,@Inherited是一个标识,用来修饰注解,如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解,需要的朋友可以参考下
1. @Inherited
作用:
一个标识,用来修饰注解,如果一个类用上了 @Inherited修饰 的注解,那么其子类也会继承这个注解
注意:
- 接口用上个 @Inherited 修饰的注解,其实现类不会继承这个注解
- 父类的方法用了@Inherited修饰的注解,子类也不会继承这个注解
- 当用了 @Inherited 修饰的注解的 @Retention 是 RetentionPolicy.RUNTIME ,则增强了继承性,在反射中可以获取得到
2. 代码演示
2.1 创建注解
AAnnotate
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface AAnnotate { public String name() default ""; }
BAnnotate
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface BAnnotate { public String name() default ""; }
2.2 创建父类子类
创建父类SuperClass
@AAnnotate public class SuperClass { private int SuperClassx; public int SuperClassy; public SuperClass() { } //私有 private int SuperClassX(){ return 0; } //公有 public int SuperClassY(){ return 0; } }
创建子类Subclass
@BAnnotate public class Subclass extends SuperClass { private int Subclassx; public int Subclassy; private Subclass() { } public Subclass(int i) { } //私有 private int SubclassX() { return 0; } //公有 public int SubclassY() { return 0; } }
2.3 测试
class TestMain { public static void main(String[] args) { Class<Subclass> clazz = Subclass.class; System.out.println("============================AnnotatedElement==========================="); //获取自身和父亲的注解。如果@AAnnotate未加@Inherited修饰,则获取的只是自身的注解而无法获取父亲的注解。 System.out.println(Arrays.toString(clazz.getAnnotations())); System.out.println("------------------"); } }
3. 反射
以下是对反射的拓展,与本文无关
class TestMain { public static void main(String[] args) { Class<Subclass> clazz = Subclass.class; System.out.println("============================Field==========================="); // 自身和父亲的公有字段 System.out.println(Arrays.toString(clazz.getFields())); System.out.println("------------------"); //自身所有字段 System.out.println(Arrays.toString(clazz.getDeclaredFields())); System.out.println("============================Method==========================="); //自身和父亲的公有方法 System.out.println(Arrays.toString(clazz.getMethods())); System.out.println("------------------"); // 自身所有方法 System.out.println(Arrays.toString(clazz.getDeclaredMethods())); System.out.println("============================Constructor==========================="); //自身公有的构造方法 System.out.println(Arrays.toString(clazz.getConstructors())); System.out.println("------------------"); //自身的所有构造方法 System.out.println(Arrays.toString(clazz.getDeclaredConstructors())); System.out.println("============================AnnotatedElement==========================="); //获取自身和父亲的注解 System.out.println(Arrays.toString(clazz.getAnnotations())); System.out.println("------------------"); //只获取自身的注解 System.out.println(Arrays.toString(clazz.getDeclaredAnnotations())); System.out.println("------------------"); } }
到此这篇关于SpringBoot中的@Inherited注解详解的文章就介绍到这了,更多相关@Inherited注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!