Java中注解学习系列教程-2
凯哥java 凯哥java br/>在上一篇文章中,我们讲解了:Java中注解的定义、JDK中内置注解、第三方注解。
本文是注解系列教程中的第二篇。来看看今天主要内容:
![](https://s4.51cto.com/images/blog/202101/09/aaa6a3c8110b2333faefd32d7f1fe837.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
1:注解的分类
2:元注解说明
3:自定义注解声明
一:注解的分类
![](https://s4.51cto.com/images/blog/202101/09/119a67d8b412a659330fbb1bbb1d69e0.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
注解根据运行机制、来源、功能来分:
1.1:按照运行机制来分,即时注解存在于程序的哪个阶段
![](https://s4.51cto.com/images/blog/202101/09/582962d89f83d9d74d98f5c9fbfc15b2.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
源码注解(source):在源码中存在的。
如:lombak的@data注解:
br/>编译注解(class):编译期。既是在源码和class中都有的。
JDK自带的三个注解(@Override(重写、覆盖)、@Deprecated(废弃的,过时的)、@Suppvisewarnings(压缩警告))都是编译期的注解
举例: override
运行是注解(runtime):在运行阶段任然起作用的,甚至会影响运行逻辑。
如:spring 的autowired注解:
1.2:按照来源来区分,既是注解从哪里来的br/>按照来源来区分分为:JDK自带的注解、第三方注解、自定义注解
如下图:
![](https://s4.51cto.com/images/blog/202101/09/ce1686438ea297d0d0e62e6d46b6dd3a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
1.3:按照功能来区分:
按照功能来区分,可以分为:元注解和非元注解。如下图:
![](https://s4.51cto.com/images/blog/202101/09/a563c98bdbf795a125909f813c06825b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
二:元注解说明
2.1:什么是元注解?
元注解是指注解的注解。JAVA中元注解主要包括以下四个:
![](https://s4.51cto.com/images/blog/202101/09/02a038941f7d277cf2bb72511874a9e1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
2.2:@Target
target注解的作用:标注注解的作用域。如果有多个作用域用英文逗号进行分割
br/>target注解作用域有哪些?
构造器、字段、局部变量、方法、包、参数、接口。具体如下图:
![](https://s4.51cto.com/images/blog/202101/09/891dca971836ea30a71815842eaa8f63.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s4.51cto.com/images/blog/202101/09/060ca6a37d300b81da88265612f9f8b5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
2.3:@Retention
retention的作用:注解的生命周期。
br/>注解生命周期有哪些呢?
只在源码显示的souce、编译期的class、运行时候存在的runtime。如下图:
![](https://s4.51cto.com/images/blog/202101/09/48e6b214124d1ad9c65f4845efc67349.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
生命周期大小:
![](https://s4.51cto.com/images/blog/202101/09/0de921a10be5164552bbc9312dfb2ac7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
2.4:@Inherited
inherite:标识性的元注解。标识当前的注解可以由子注解继承
br/>![](https://s4.51cto.com/images/blog/202101/09/aeaf72324f76c7c4ad6adada9d592706.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
2.5:@Documented
documented:在生成文档的时候,会被包含
三:自定义注解的写法:
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented()
public @interface MyAnnotation1 {
public abstract String value();
}
声明:本文是由凯哥(凯哥Java)发布的Java注解学习系列教程第二篇。未经允许,不得转载
来源:oschina
链接:https://my.oschina.net/u/4331414/blog/4888590