通过这篇文章你会知道如下内容:
- 元注解类型有哪些,作用都是哪些?
- 注解如何使用?如何提取?
在springBoot中存在很多注解的使用,同时看了这边文章,所以总结下,把这个知识再次梳理下;
-
@Target
Target 是目标的意思,@Target 指定了注解(springbootApplication)运用的地方。
target取值有如下:
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
-
@Retention
当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间,即生命周期
比如在运行阶段要提取到注解,就要注意生命的周期的使用
它的取值如下:
RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
-
@Documented
它的作用是能够将注解中的元素包含到 Javadoc 中去。
-
@Inherited
子类就继承了超类的注解
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface Test {}
@Test
public class A {}
public class B extends A {}
超类的注解如果使用了@Inherited修饰,那么子类如果没有使用任何注解标注,那么子类继承超类上的注解
-
@Repeatable
作用:使得作用的注解可以取多个值
这个先上一个例子
@interface Persons {
Person[] value();
}
@Repeatable(Persons.class)
@interface Person{
String role default "";
}
@Person(role="A")
@Person(role="B")
@Person(role="C")
public class Man{
}
按照规定 @Repeatable这里面包含的注解必须有一个value 的属性,属性类型(Person)是一个被 @Repeatable 注解过的注解
-
注解中的属性
public @interface XX { Class<?>[] exclude() default {}; boolean lazyInit() default false; }
注解中的属性是类型+名称,如果有默认值可以指定,这样在使用注解的时候,就可以不用进行赋值了
-
注解与反射组合