Java Annotation概述
@(Java)[Annotation|Java]
Java Annotation概述
用途
- 编译器的相关信息,如用于检测错误和一些警告
- 编译时和部署时的处理,如一些软件用于自动生成代码之类的
- 运行时处理
自定义注解
和接口的定义类似,只是用@interface来标识,注解中包含的属性可以具有默认值,如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ActivityMetadata {
String activityName() default "活动";
}
预定义注解
用于Java语言中的注解
@Deprecated:用于表示一些类,方法或者属性不再使用@Override:用于指示编译器,表示元素覆盖了定义在父类的元素@SuppressWarnings:用于指示编译器不再产生警告@SafeVarargs:用于方法或者构造器,表示没有对其参数有不安全的操作,编译器不再产生未检查警告@FunctionalInterface:Java 8中引入,定义类型为函数接口
用于其它注解的注解(元注解)
@Retention
表示注解如何存储,也可以视作注解的生命周期
| 值 | 说明 |
|---|---|
| RetentionPolicy.SOURCE | 仅仅保留在源代码中,编译器忽略该注解 |
| RetentionPolicy.CLASS | 可以用在在编译器在编译期间,但是JVM忽略该注解 |
| RetentionPolicy.RUNTIME | 保留到JVM中,可以在运行期中使用 |
注:大部分框架自定义的注解一般用于RUNTIME,在运行期应用。
@Documented
表示在使用javadoc生成文档的时候,也需要将该注解包含进去
@Target
用于限制其它注解所能使用的范围
| 值 | 范围 |
|---|---|
| ElementType.ANNOTATION_TYPE | 注解 |
| ElementType.CONSTRUCTOR | 构造器 |
| ElementType.FIELD | 属性 |
| ElementType.LOCAL_VARIABLE | 局部变量 |
| ElementType.METHOD | 方法 |
| ElementType.PACKAGE | 包定义 |
| ElementType.PARAMETER | 方法参数 |
| ElementType.TYPE | 任意类型 |
@Inherited
表示注解可以被继承,默认不继承
@Repeatable
Java 8 中引入,指示注解可以被重复应用于同一个元素
示例:
功能说明:定义一个注解,该注解用于反应属性的中文说明,程序使用反射从中解析出该类的属性以及对应的中文说明。
Activity.java
public class Activity {
@ActivityMeta(description="活动名称")
private String activityName;
@ActivityMeta(description="活动类型")
private String activityType;
public String getActivityName() {
return activityName;
}
public void setActivityName(String activityName) {
this.activityName = activityName;
}
public String getActivityType() {
return activityType;
}
public void setActivityType(String activityType) {
this.activityType = activityType;
}
}
ActivityMeta.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ActivityMeta {
public String description();
}
Demo
public class AnnotationDemo {
private static final Logger logger = LoggerFactory
.getLogger(AnnotationDemo.class);
@Test
public void demo() {
for (Field field : Activity.class.getDeclaredFields()) {
ActivityMeta activityMeta = field.getAnnotation(ActivityMeta.class);
logger.debug(field.getName()+":" + activityMeta.description());
}
}
}
输出:
2016-07-16 12:12:41 [DEBUG]-[Thread: main]-[com.jabnih.analysis.annotation.AnnotationDemo.demo()]:
activityName:活动名称
2016-07-16 12:12:41 [DEBUG]-[Thread: main]-[com.jabnih.analysis.annotation.AnnotationDemo.demo()]:
activityType:活动类型
参考:
官方Tutorial:
https://docs.oracle.com/javase/tutorial/java/annotations/index.html
Java Annotation概述的更多相关文章
- 《java集合概述》
JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...
- Java Annotation 注解
java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...
- Java的概述以及语法
Java的语法分为标示符和数据类型 Java的概述: 一些手打的: long l = 12345; //隐式转换 int a = (int)121234567L; //强制转换 float f =12 ...
- paip.Java Annotation注解的作用and 使用
paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...
- Java Annotation认知(包括框架图、详细介绍、示例说明)
摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...
- Java Annotation原理分析(一)
转自:http://blog.csdn.net/blueheart20/article/details/18725801 小引: 在当下的Java语言层面上,Annotation已经被应用到了语言的各 ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
- Java Annotation 机制源码分析与使用
1 Annotation 1.1 Annotation 概念及作用 1. 概念 An annotation is a form of metadata, that can be added ...
- Java Annotation手册
Java Annotation手册 作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig) 原文:http://www.matri ...
随机推荐
- 记录一次Quartz2D学习(五)
(四)内主要讲了绘制状态的保存与恢复 本次主要讲述 缩放,旋转,平移等操作 5.附加操作 5.1 旋转 TIP: 旋转操作主要是对本次渲染的图层进行旋转,旋转的中心为左上角顶点 - (void)dra ...
- pdf文件的导入导出
下面的代码自己本人没有尝试过,只是用来做记录,用到时候再说! 最近碰见个需求需要实现导出pdf文件,上网查了下代码资料总结了以下代码.可以成功的实现导出pdf文件. 在编码前需要在网上下载个itext ...
- oncopy="document.selection.empty()"跟oncopy="return false"什么区别?
实现效果一样,禁止复制. 区别: oncopy="document.selection.empty()" 没禁止,只是把它复制的内容,变成空了: oncopy="ret ...
- 动态调用WebService
WebService内容 using Microsoft.CSharp;using System;using System.CodeDom;using System.CodeDom.Compiler; ...
- S5PV210_时钟系统
1.S5PV210的时钟获得:外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频 S5PV210外部有4个W晶振接口,可以根据需要来决定在哪里接晶振.接了晶振之后上电相应的模块就能产生振 ...
- 《Google软件测试之道》基础
<Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...
- [LeetCode] Zigzag Iterator 之字形迭代器
Given two 1d vectors, implement an iterator to return their elements alternately. For example, given ...
- [LeetCode] Sudoku Solver 求解数独
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- [LeetCode] Longest Substring Without Repeating Characters 最长无重复子串
Given a string, find the length of the longest substring without repeating characters. For example, ...
- 分分钟带你玩转 Web Services
当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来. 毕竟是多家不同的公司的产品,研发开发语言.采用技术框架基本上是百花齐放. 怎样让自家系统提供的服务具有跨平台.跨语言.跨各种防 ...