概念描述:
- JDK1.5 之后的新特性
- 用来说明程序的
- 使用注解:@注解名称
分类:
- 编写文档:通过代码里表示的注解生成文档【生成文档doc文档】
- 代码分析:通过代码里表示的注解对代码进行分析【使用反射】
- 编译检查:通过代码里表示的注解让编译器能够实现基本的编译检查【Override】
JDK中预定义的一些注解:
- @Override: 检测被该注解标注的方法是否是继承自父类(接口)的
- @Deprecated:该注解标注的内容,表示已经过时
- @SupperessWarnings:压制警告,一般传递参数all @SuppressWarnings("all")
自定义注解:
自定义注解分为两部分,元注解与属性。注解本质上是一个继承Annotation的接口
如:
public interface XXX extends java.lang.annotation.Annotation{ }
元注解
用于描述注解的注解
@Target:描述注解能够作用的位置
@Retention:描述注解被保留的阶段
@Documented:描述注解是否被抽取到api文档中
@Repeatable:它表示在同一个位置重复相同的注解
@Target
标记这个注解应该是哪种 Java 成员
@Retention
描述注解被保留的阶段
@Documented
描述注解是否被抽取到api文档中
在方法上加了注解后,通过javadoc 命令进行编译,生成的java-api文档也是有注解的。
@Inherited
描述注解是否被子类继承
@Repeatable
元注解@Repeatable是JDK1.8新加入的,它表示在同一个位置重复相同的注解。在没有该注解前,一般是无法在同一个类型上使用相同的注解的。
import java.lang.annotation.*;
//使用Java8新增@Repeatable原注解
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(FilterPaths.class)//参数指明接收的注解class
public @interface FilterPath {
String value();
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface FilterPaths {
FilterPath[] value();
}
//使用案例
@FilterPath("/web/update")
@FilterPath("/web/add")
@FilterPath("/web/delete")
class AA{ }
属性
1. 属性的返回值类型(基本数据类型,String,枚举,注解,以上类型的数组)
2. 属性名需要赋值(默认赋值的话就不用)