1 注解
1.1 定义
Annotation(注解),用于为Java代码提供元数据。简单理解注解可以看做是一个个标签,用来标记代码。是一种应用于类、方法、参数、变量、构造器及包的一种特殊修饰符。
1.2 注解的声明
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MyAnnotation{ }
1.3 元注解
元注解就是注解到注解上的注解,或者说元注解是一种基本注解,它能用来注解其他注解。
我们可以将元注解看成一种特殊的修饰符,用来解释说明注解,它是注解的元数据。
- @Documented
被@Documented修饰的Annotation类将会被javadoc工具提取成文档。
- @Inherited
被@Inherited修改的Annotation将具有继承性,如果某个类使用了@MyAnnotation注解(定义该Annotation时使用了@Inherited修饰)修饰,则其子类将自动被@MyAnnotation修饰。
- @Retention
被@Retention修改的注解,结合RetentionPolicy.XXX可以指定该注解存在的声明周期。
SOURCE:仅存在Java源码文件,经过编译器后便丢弃
CLASS:存在Java源文件,以及经过编译器后生成的Class字节码文件,但在运行时JVM中不再保留
RUNTIME:存在源文件、变异生成的Class字节码文件,以及保留在运行时JVM中,可以通过反射读取注解信息
- @Target
表示该注解类型所使用的程序元素类型,结合ElementType.XXX来使用。
- @Repeatable
Java8新增的可重复注解。
1.4 JDK中常见注解
- @Override
用于告知编译器,我们需要覆写超类的当前方法。
- @Deprecated
使用这个注解,用于告知编译器,某一程序元素(比如方法,成员变量)不建议使用了(即过时了)。
- @SuppressWarnings
用于告知编译器忽略特定的警告信息,例在泛型中使用原生数据类型,编译器会发出警告,当使用该注解后,则不会发出警告。
- @FunctionalInterface
用户告知编译器,检查这个接口,保证该接口是函数式接口,即只能包含一个抽象方法,否则就会编译出错。
1.5 自定义注解使用
- 格式
@Documented @Target(ElementType.METHOD) @Inherited @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotataion{ String name(); int age() default 17; String hello() default "spring boot"; }
- 成员变量
定义:用无形参的方法形式来声明,注解方法不能带参数,比如name(),age()
类型:前面可以用数据类型来修饰
默认值:成员变量可以有默认值,比如default "spring boot"
- 注解使用
@MyAnnotation(name="Jack&