注解的概念:
可以简单的将注解理解为标签(标签里面的内容就是注解内的元素),想钉在哪就钉在哪,比如:钉在类型上(类/接口/枚举),钉在类的数据成员上,钉在类的方法成员上,钉在方法的入参上,甚至钉在别的注解上等等。
官方下的注解含义为:注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非代码本身的一部分。注解对于代码的运行效果没有直接影响。
注解有许多用处,主要如下:
- 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
- 编译阶段时的处理: 软件/工具/框架可以读取注解信息来生成代码/Html文档或者其它处理
- 运行时的处理: 注解信息可以在程序运行的时候被提取出来加以利用
注解的定义:
注解的定义是由 @interface 定义的一种类类型,是个语法糖。注解的超类都是java.lang.Annotation | |
注解定义的语法 | 注解定义的含义 |
@interface MyAnno1{ } | 无内容的注解 |
@interface MyAnno2{ int value(); } | 拥有单值元素的注解 |
@interface MyAnno3{ int value(); String name(); } |
拥有多个元素的注解 |
@interface MyAnno4{ int value() default 10 ; String name() default "anno" ;
扫描二维码关注公众号,回复:
4631026 查看本文章
} |
拥有多个元素的注解, 某些元素可以携带默认值 |
@Retention(RetentionPolicy.RUNTIME) @interface MyAnno5{ } |
可以对自定义注解进行元注, 元注解是Java预留的,用来管控自定义注解的生态 |
元注解:我就简单说它是元注,它是用来管控自定义注解的生态的。元注是java预留的,一共有5种。@Retention @Target @Documented @Inherited @Repeatable
元注解@Retention 管控自定义注解的保留期(/生命) | ||
元注解 | 元注解内的元素 | 元注解内的元素的作用, 自定义注解的生命 |
@Retention | RetentionPolicy.SOURCE | 代码阶段, 作用:代码维护人员看看而已 |
RetentionPolicy.CLASS | 编译阶段, 作用:给其它工具/框架来使用 |
|
RetentionPolicy.RUNTIME | 运行阶段, 作用:代码运行时可以提取自定义注解内容来消费 |
元注解@Target 管控自定义注解可以钉在哪里 ( 默认:无@Target元注的自定义注解可以钉在任何地方 ) |
||
元注解 | 元注解内的元素 | 元注解内的元素的作用, 自定义注解可以钉在哪里 |
@Target | ElementType.TYPE | 钉在类型(类/接口/枚举)上 |
ElementType.FIELD | 钉在类的数据成员上 | |
ElementType.METHOD | 钉在类的方法成员上 | |
ElementType.PARAMETER | 钉在方法的入参上 | |
ElementType.LOCAL_VARIABLE | 钉在方法的局部变量上 | |
ElementType.CONSTRUCTOR | 钉在类的构造函数上 | |
ElementType.ANNOTATION_TYPE | 钉在别的注解上 | |
ElementType.PACKAGE | 钉在包上 |
元注解@Inherited 管控自定义注解可以被子类继承 |
元注解@Documented 管控自定义注解种的内容可以用来制作JavaDoc文档 |
元注解@Repeatable 是jdk8才引入的,以上的四个元注解中的内容元素都是单值类型的,而@Repeatable中的元素是数组类型的,并且该元素必须是个注解 | |
@interface Persons { //定义:容器 @Repeatable(Persons.class) //元注:Persons容器 @Person(role="artist") //代码中声明注解 |
注解的用法:
注解的运用场景:
注解的小示例: