@(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概述的更多相关文章

  1. 《java集合概述》

    JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...

  2. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  3. Java的概述以及语法

    Java的语法分为标示符和数据类型 Java的概述: 一些手打的: long l = 12345; //隐式转换 int a = (int)121234567L; //强制转换 float f =12 ...

  4. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  5. Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  6. Java Annotation原理分析(一)

    转自:http://blog.csdn.net/blueheart20/article/details/18725801 小引: 在当下的Java语言层面上,Annotation已经被应用到了语言的各 ...

  7. Java Annotation 及几个常用开源项目注解原理简析

    PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...

  8. Java Annotation 机制源码分析与使用

    1 Annotation 1.1 Annotation 概念及作用      1.  概念 An annotation is a form of metadata, that can be added ...

  9. Java Annotation手册

    Java Annotation手册 作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig) 原文:http://www.matri ...

随机推荐

  1. jTemplates部分语法介绍

    1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*8==16} good {#else} fail {# ...

  2. 【转】深入浅出JavaScript之闭包(Closure)

    闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不 ...

  3. Play Framework 项目遇到问题

    1.Debug调试出错,提示: Error occurred during initialization of VMagent library failed to init: jdwpERROR: C ...

  4. Win10全屏看视频时任务栏不隐藏

    解决办法: 1.对任务栏鼠标右键点击,选择"任务管理器" 2.在进程选项下找到Windows进程中的Windows资源管理器 3.对Windows资源管理器鼠标右键,选择重新启动

  5. POJ2104 K-th Number [分块做法]

    传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求 ...

  6. [No000092]SVN学习笔记3-Import/Checkout(迁入/迁出),GetLock(加锁)

    一.TortoiseSVN Client 获取服务器端的文件到新的本地文件夹 1.在本地新文件夹上右键菜单: 2.打开Repo-browser(可能需要输入你的用户名&密码) 3.输入服务器端 ...

  7. 微信H5中的一些坑

    最近在写微信公众号H5页面 遇到了一些坑,在这里记录一下 记录一下signature的计算 // 首先找到hex_sha1的加密算法,ticket 是后端提供的 var url_local = loc ...

  8. FineUI(专业版)v3.2.0 发布(ASP.NET UI控件库)!

    +2016-08-20 v3.2.0 +表格增强. +表格列RenderField增加属性ClientHtmlEncode,用于在客户端进行HTML编码. -增加示例:单元格编辑->杂项-> ...

  9. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)

    前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...

  10. MVC使用ajax异步刷新时怎样输出从后台中传过来的JSON数据

    前言 这几天在学习MVC使用AJAX异步刷,因为是新手.所以在js中传参数到后台以及后台返回数据到前台怎么接受,怎么前台遍历出JSON数据都开始不知道,相信新手在使用时跟我一样会遇到,这里我就和大家分 ...