2019独角兽企业重金招聘Python工程师标准>>>

1. 基本语法

Java代码

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
// The @Bind tag.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Bind {  public String name();  public int time() default 0;
}

以上是一个用于Method级的简单的@Bind注解类,比较有点象接口的结构,事实上,与其它任何Java接口一样,注解也将会编译成class文件。

 /** * Use the @Bind tag. */
public class BindCase {  @Bind(name="case", time=1)  public void method(){  // do something..  }  public void method1(){  // do something..  }  @Bind(name="case1", time=20)  public void method2(){  // do something..  }
}

编写注解处理器:
     在 JASE 1.5扩展了了反射机制的API,为我们提供了相应的注解处理器的API,另外还可以通过外部工具 apt 来解析带有注解的Java Code.

public class BindCaseTracker{  private static Logger logger = Logger.getLogger(BindCaseTracker.class);  public static void printBindCase(Class<?> bindClass){  assert bindClass != null;  for (Method method : bindClass.getDeclaredMethods()){  Bind bind = method.getAnnotation(Bind.class);  if (bind == null) continue; // Not found annotation.  logger.debug(String.format("Found [%s] Bind Case : %s-%d", method  .getName(), bind.name(), bind.time()));  }  }  public static void main(String[] args) {  BindCaseTracker.printBindCase(BindCase.class);  }
}
  /* Output:
[DEBUG] 11-08 14:15 Found [method] Bind Case : case-1
[DEBUG] 11-08 14:15 Found [method2] Bind Case : case1-20
*///~

2. 元注解

在J2SE中内置了三种常用标准注解(Override, Deprecated, SuppressWarnings)以及四种元注解:

    @Target:  表示该注解可以用于什么地方。可用ElementType枚举类型主要有: TYPE : 类、接口或enum声明 FIELD: 域(属性)声明 METHOD: 方法声明 PARAMETER: 参数声明 CONSTRUCTOR: 构造方法声明 LOCAL_VARIABLE:局部变量声明 ANNOTATION_TYPE:注释类型声明 PACKAGE: 包声明 @Retention:  表示需要在什么级别保存该注解信息。可用RetentionPolicy枚举类型主要有: SOURCE: 注解将被编译器丢弃。 CLASS  :  注解在class文件中可能。但会被VM丢弃。 RUNTIME: VM将在运行时也保存注解(如果需要通过反射读取注解,则使用该值)。 @Documented:  将此注解包含在Javadoc中。 @Inherited:  允许子类继承父类中的注解。

3. 使用技巧

a. 如果希望定义的注解用于多种  ElementType 的话可以写成:

import static java.lang.annotation.ElementType
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })

b. 在声明注解中的方法时可通过 default 来指定默认值。
           c.  在声明注解中的方法返回类型可结合泛型使用,如:

Class<? extends Payload>[] payload() default {};

d. 可在注解类中定义嵌套注解,如:

import static java.lang.annotation.ElementType  @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
public @interface NotNull {  String message() default "{javax.validation.constraints.NotNull.message}";  @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })  @Retention(RUNTIME)  @Documented  @interface List {  NotNull[] value();  }
}
@NotNull.List(value = { @NotNull })
protected List<?> list;

e. 在JASE中提供了很少的内置注解,不过JBoss提供了一个 validation-api 的类库,提供常用验证注解。有兴趣的朋友可以下载看看,其 maven 依赖为:

<dependency>  <groupId>javax.validation</groupId>  <artifactId>validation-api</artifactId>  <version>1.0</version>
</dependency>

转载于:https://my.oschina.net/stefanzhlg/blog/354908

Java自定义Annotation方法相关推荐

  1. java自定义一个方法,用于返回两个整数的和

    java自定义一个方法,用于返回两个整数的和 /*** 自定义一个方法* 用于返回两个整数的和*/ public class Test17 {public static int getSum(int ...

  2. 深入理解Java注解Annotation及自定义注解

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

  3. Java自定义注解Annotation的实现原理

    文章目录 1.什么是注解? 2.注解的用处: 3.注解的原理: 4.元注解: 5.常见标准的Annotation: 6.自定义注解: 7.自定义注解实例: 1.什么是注解?   对于很多初次接触的开发 ...

  4. java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.注解可以看作是一种特殊的标记,在程序在编译或 ...

  5. java简单自定义Annotation

    为什么80%的码农都做不了架构师?>>>    原文内容比较多,这里就简单地说一下.java 5以后增加了3个annotation, @Override @Deprecated @S ...

  6. 深入JAVA注解(Annotation):自定义注解

    一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解 ...

  7. Java注解Annotation的用法 - 自定义Annotation实现

    Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...

  8. Java 注解(Annotation)使用方法归纳

    Java注解Annotation使用方法归纳 简介 注解是从JDK5开始支持,是Java对元数据的一种特殊支持.与注释有一定区别,可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等 ...

  9. java自定义封装一个方法_Java自定义套件封装教程

    Java自定义套件封装教程 时间:2017-07-28     来源:华清远见JAVA学院 各位亲爱的小伙伴们大家好,近很多伙伴都问我该怎么做Java自定义套件封装,今天华清Java学院小编在这里做了 ...

最新文章

  1. 海思3536:PC客户端编译过程报错及解决方法
  2. Blend_ControlTemplate(Z)
  3. 通过COS上传文件至腾讯云
  4. 查看VMware上虚拟机的 ip 地址
  5. RTX5 | 线程标志组02 - 获取线程标志与清除线程标志
  6. 算法的时间复杂度[ZT]
  7. 当我的master被fork后,我把master删了,然后我就成了他人的bitch
  8. pinpoint 监控mysql_基于Centos7系统安装部署Pinpoint分布式监控
  9. 拉普拉斯变换公式表_复变函数之拉普拉斯变换小结
  10. 医疗中文问句意图匹配Top3方案ppt
  11. [翻译]Monocular Visual Odometry using OpenCV
  12. VMware资源集合,分享一波
  13. paip.网站接入QQ登录总结
  14. 简单高效,分享几款我在使用的效率神器
  15. 主动轮廓模型snake
  16. 【从零搭建一个淘宝客公众号02】- 基于koa搭建后台
  17. android手机如何截屏,安卓手机怎么截图? (全文)
  18. 万洲金业:黄金ETF如何影响黄金价格?
  19. 2019中国科大夏令营机试
  20. 快应用联盟展示入口合集(11月更新)

热门文章

  1. 浪潮成立Inspur DevOps Lab:以应用开发和平台服务打造开发者生态
  2. iOS 程序 main函数之前发生什么
  3. Android技能树 — Android存储路径及IO操作小结
  4. 1386兆瓦:东能源拟建全球最大海上风电场
  5. python代码编辑器PyCharm快捷键补充
  6. 多线程junit单元测试
  7. JAVA中Long与Integer
  8. Ubuntu 下升级git到最新版
  9. 2013-我的前事今生(完结篇)
  10. 【转载】究竟什么是POJO?