Java自定义注解的详解

  

<强> Java自定义注解

  

Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容。在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解。

  

Java1.5引入了注解,当前许多java框架中大量使用注解,如hibernate,泽西岛,春天。注解作为程序的元数据嵌入到程序当中。注解可以被一些解析工具或者是编译工具进行解析。我们也可以声明注解在编译过程或执行时产生作用。

  

在使用注解之前,程序源数据只是通过java注释和javadoc,但是注解提供的功能要远远超过这些。注解不仅包含了元数据,它还可以作用于程序运行过程中,注解解释器可以通过注解决定程序的执行顺序例。如,在泽西岛的webservice我们为方法添加URI字符串的形式的* *路* *注解,那么在程序运行过程中jerser解释程序将决定该方法去调用所给的URI。

  

<>强创建Java自定义注解

  

创建自定义注解和创建一个接口相似,但是注解的接口关键字需要以@符号开头。我们可以为注解声明方法。我们先来看看注解的例子,然后我们将讨论他的一些特性。

        包com.journaldev.annotations;      进口java.lang.annotation.Documented;   进口java.lang.annotation.ElementType;   进口java.lang.annotation.Inherited;   进口java.lang.annotation.Retention;   进口java.lang.annotation.RetentionPolicy;   进口java.lang.annotation.Target;      @Documented   @Target (ElementType.METHOD)   @Inherited   @Retention (RetentionPolicy.RUNTIME)   公共@ interface MethodInfo {   默认的Pankaj字符串作者();   字符串的日期();   int修订()默认1;   字符串的评论();   }   之前      
      <李>注解方法不能带有参数,李   <李>注解方法返回值类型限定为:基本类型,字符串,枚举,注释或者是这些类型的数组;李   <李>,注解方法可以有默认值;李   <李>,注解本身能够包含元注解,元注解被用来注解其它注解。
      李   
  

这里有四种类型的元注解:

  

<强> 1。@Documented ——指明拥有这个注解的元素可以被javadoc此类的工具文档化。这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。如果一种声明使用记录进行注解,这种类型的注解被作为被标注的程序成员的公共API。

  

<强> 2。@Target ——指明该类型的注解可以注解的程序元素的范围。该元注解的取值可以为类型、方法、构造函数,等。如果目标元注解没有出现,那么定义的注解可以应用于程序的任何元素。

  

<强> 3。@Inherited ——指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么也将自动查询当前类的父类是否存在继承元注解,这个动作将被重复执行知道这个标注类型被找的到,或者是查询到顶层的父类。

  

<强> 4 .@Retention ——指明了该注释被保留的时间长短.RetentionPolicy取值为源,类,运行时。

  

<强> Java内建注解

  

Java提供了三种内建注解。

  

<强> 1。@Override ——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。

  

<强> 2。@Deprecated ——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解. java在javadoc中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。

  

<强> 3。@SuppressWarnings 强——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是源(译者注:在源文件中有效)并且被编译器丢弃。

  

我们来看一个java内建注解的例子参照上边提到的自定义注解。

        包com.journaldev.annotations;      进口java.io.FileNotFoundException;   进口java.util.ArrayList;   进口并不知道;      公开课AnnotationExample {      公共静态void main (String [] args) {   }      @Override   @MethodInfo (=癙ankaj”,作者评论=主方法,日期=2012年11月17日,修订=1)   公共字符串toString () {   返回“重载toString方法”;   }      @Deprecated   @MethodInfo(评论=弃用方法,日期=2012年11月17日)   公共静态孔隙oldMethod () {   system . out。println(“老方法,不使用它。”);   }      @SuppressWarnings({“不”、“弃用”})   @MethodInfo (=癙ankaj”,作者评论=主方法,日期=2012年11月17日,修订=10)   公共静态孔隙genericsTest()抛出FileNotFoundException {   列表l=new ArrayList ();   l.add (' abc ');   oldMethod ();   }      }   

Java自定义注解的详解