一分钟理解注解
2017-04-23 15:37
267 查看
注解这个东西我们肯定每天都能看见,也许有时候看的太多了到是会忽略注解这东西具体是如何工作的。今天在这里用最短的篇幅快速讲解下注解的原理,对这块记的不太清楚的同学也可以再次看看,下次有人详细问这块的话不至于一知半解。
一句话描述:就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。
关键字解析:
@Rentention用来标记自定义注解的有效范围 ,即注解的生命周期
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
2.@Target – 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给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.反射
一句话描述:就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。
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 @Inherited public @interface LogForController { /** * 功能描述 */ public String optMemo() default ""; /** * 操作模块 */ public String optModel() default ""; }
关键字解析:
@Rentention用来标记自定义注解的有效范围 ,即注解的生命周期
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
2.@Target – 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给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.反射
相关文章推荐
- 一分钟理解注解
- 深入理解Java:注解(Annotation)自定义注解入门
- 深入理解Java:注解(Annotation)--注解处理器
- Java:注解(Annotation)深度理解 自定义注解
- 深入理解Java:注解(Annotation)--注解处理器
- 深入理解Java:注解(Annotation)基本概念
- 重新理解@Resource注解
- 深入理解Java:注解(Annotation)--注解处理器
- 深入理解Java:注解(Annotation)--注解处理器
- 深入理解Java的Annotation系列-第一部分 注解基础
- JAVA 注解的学习和对Spring注解的理解
- 关于hbase中注解的理解 转载
- 深入理解Java:注解(Annotation)自定义注解入门
- 深入理解Java:注解(Annotation)--注解处理器
- Hinbernate继承映射为4张表注解版【不太理解】(二十一)
- 深入理解Java:注解(Annotation)自定义注解入门
- SSM框架----Spring MVC理解和主要使用的注解详解
- 理解Java基础之注解Annotation
- 理解Android中的注解与反射
- java 注解 理解