博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一分钟理解注解
阅读量:7242 次
发布时间:2019-06-29

本文共 1648 字,大约阅读时间需要 5 分钟。

  hot3.png

注解这个东西我们肯定每天都能看见,也许有时候看的太多了到是会忽略注解这东西具体是如何工作的。今天在这里用最短的篇幅快速讲解下注解的原理,对这块记的不太清楚的同学也可以再次看看,下次有人详细问这块的话不至于一知半解。

一句话描述:就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。

package com.qk365.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @Target说明了Annotation所修饰的对象范围 * * @Retention定义了该Annotation被保留的时间长短 *  * @Documented可以被例如javadoc此类的工具文档化 *  * @Inherited是否可继承 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface LogForController {	/**	 * 功能描述	 */	public String optMemo() default "";	/**	 * 操作模块	 */	public String optModel() default "";}

关键字解析:

  1. @Rentention用来标记自定义注解的有效范围 ,即注解的生命周期
  • RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
  • RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
  • RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。

 

      2. – 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给7个属性都添加注解,仅仅排除一个属性,那么你需要在定义target包含所有的属性。

  • ElementType.TYPE:用于描述类、接口或enum声明
  • ElementType.FIELD:用于描述实例变量
  • ElementType.METHOD
  • ElementType.PARAMETER
  • ElementType.CONSTRUCTOR
  • ElementType.LOCAL_VARIABLE
  • ElementType.ANNOTATION_TYPE 另一个注释
  • ElementType.PACKAGE 用于记录java文件的package信息

3.@Documented 使用了@Documented的可以在javadoc中找到

4.@Interited 可继承性的标识,使用了Interited表示注解里的内容可以被子类继承.

5.@interface 这个东西在声明注解的时候必须得使用,用@interface就意味着这个东西已经继承了java.lang.annotation.Annotation,也说明了它是一个注解。

 

注解用途: 1.生成文档。

                    2. 跟踪代码依赖性,实现替代配置文件功能

                   3. 在编译时进行格式检查。

                   4.反射

 

转载于:https://my.oschina.net/hapier/blog/730221

你可能感兴趣的文章
Kotlin技术分享-异常
查看>>
前端学习笔记------多张图片生成canvas思路.md
查看>>
Mysql主从同步实战(一)【知其然】
查看>>
用PWA来做一个天气应用
查看>>
js中的||与&&用法
查看>>
在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具 -toolfk程序员工具网...
查看>>
重新认识RxJava系列之订阅流程源码分析
查看>>
Yarn小白入门
查看>>
07-jvm-查询命令-02
查看>>
快速制作美观的微信公共号二维码?
查看>>
(十二)JAVA springboot ssm b2b2c多用户商城系统源码:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪...
查看>>
直击KubeCon 2018 |云原生正在改变你的衣食住行
查看>>
拦截器
查看>>
AWK 简明教程
查看>>
设置SPFILE中的参数值
查看>>
openstack目前个人认为要解决的问题总结,会持续更新
查看>>
我的友情链接
查看>>
iops计算详解
查看>>
Android编译报R.java报不到的错误解决办法
查看>>
CentOS5.x下安装配置FTP服务器
查看>>