摘要:本文学习了注解的概念和使用。
环境
Windows 10 企业版 LTSC 21H2
Java 1.8
1 定义
从JDK1.5开始,增加了对元数据(描述数据属性的信息)的支持。其实说白就是代码里的特殊标志,这些标志可以在编译,类加载,运行时被读取,并执行相应的处理,以便于其他工具补充信息或者进行部署。
2 分类
按运行机制分类:
- 源码注解,这种注解只在源码阶段存在存在。
- 编译注解,注解不但在源码中存在,而且在class文件中也存在,JDK自带的注解就是属于这种类型的注解。
- 运行时注解,即便到在运行阶段仍然起作用的注解,第三方提供的注解大部分是属于这种类型的注解。
按来源分类:
- JDK自带的注解。
- 第三方的注解。
- 自定义注解。
按功能分类:
- 普通注解,对程序和代码进行标注的注解。
- 元注解,对注解标记的注解。
3 常见注解
JDK自带注解:
- @Override:表示覆盖或重写父类的方法。
- @Deprecated:表示该方法已经过时了,不建议使用。
- @SuppressWarnings:表示忽略指定警告。
第三方注解:
- @AutoWired:Spring框架中的注解。
自定义注解:
- 开发者自己定义的注解。
4 元注解
元注解的作用就是负责注解其他注解。
4.1 @Target
用于描述注解的使用范围,即被描述的注解可以用在什么地方。
取值:
- ElementType.PACKAGE:包。
- ElementType.TYPE:接口、类、枚举。
- ElementType.FIELD:字段、枚举的常量。
- ElementType.METHOD:方法。
- ElementType.PARAMETER:方法参数。
- ElementType.CONSTRUCTOR:构造函数。
- ElementType.LOCAL_VARIABLE:局部变量。
- ElementType.ANNOTATION_TYPE:注解。
4.2 @Retention
用于描述注解的生命周期,即被描述的注解在什么范围内有效。
取值:
- RetentionPolicy.SOURCE:注解仅存在于源码中,在class字节码文件中不包含。
- RetentionPolicy.CLASS:默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得。
- RetentionPolicy.RUNTIME:注解会在class字节码文件中存在,在运行时可以通过反射获取到。
4.3 @Inherited
用于说明这个注解是可以被继承的。如果父类使用了@Inherited注解,则其子类也会使用这个注解。
4.4 @Documented
用于描述注解可以被放到文档里。
5 自定义注解
使用@interface自定义注解,自动继承了java.lang.annotation.Annotation
接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。
自定义注解的每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型,并且只能是基本类型/Class/String/Enum。
可以通过default来声明参数的默认值。
语法:
1 | public 注解名称 { |
说明:
- 修饰符:只能用public或默认(default)这两个访问权限修饰符。
- 类型:只能用byte、short、char、int、long、float、double、boolean八种基本数据类型和String、Enum、Class、Annotations等数据类型,以及这一些类型的数组。
- 名称:可以自定义,如果只有一个参数成员,最好把参数名称设为value,不要忘了后加小括号。
- 默认值:注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,通常使用空字符串或0作为默认值。
编写自定义注解:
1 |
|
使用自定义注解:
1 |
|
条