你的位置:首页 > Java教程

[Java教程]Java中注解Annotation的定义、使用、解析


    此例子,用于说明如何在Java中对“注解 Annotation”的定义、使用和解析的操作。注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记。下面例子已测试,可以正常运行通过。

1、注解自定义。
这里定义两个注解,分别用来注解类和注解属性。

package cc.rulian.ann;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 类注释 */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface MyTable{  public String name() default "";  public String version() default "1";}

 

package cc.rulian.ann;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 字段注释 */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface MyField {  public String name() default "";   //名称  public String type() default "";  //类型  }

 

2、注解的使用。
说明如何在类中使用自定义注解。

package cc.rulian.ann;import java.util.Date;/** * 基础日志 * */@MyTable(name="T_BaseLog",version="2")public class BaseLog{    @MyField(name="addTime",type="Date")  private Date log_time; // 时间  @MyField(name="log_level",type="String")  private String log_level; // 级别  @MyField(name="message",type="String")  private String message; // 日志内容  public Date getLog_time()  {    return log_time;  }  public void setLog_time(Date log_time)  {    this.log_time = log_time;  }  public String getLog_level()  {    return log_level;  }  public void setLog_level(String log_level)  {    this.log_level = log_level;  }  public String getMessage()  {    return message;  }  public void setMessage(String message)  {    this.message = message;  }}

 

3、注解的解析。
说明如何解析注解。

package cc.rulian.ann;import java.lang.reflect.Field;/** * 读取注释 */public class ReadAnn{  public static void main(String[] args)  {    // 读取类的注释    BaseLog obj = new BaseLog();    // Annotation[] arr = obj.getClass().getAnnotations(); //得到所有注释    MyTable table = obj.getClass().getAnnotation(MyTable.class); // 取得指定注释    System.out.println("类注释(name): " + table.name());    System.out.println("类注释(version): " + table.version());    // 读取属性的注释    Field[] fields = obj.getClass().getDeclaredFields();    for (Field f : fields)    {      // Annotation[] arr2 = f.getAnnotations(); //得到所有注释      MyField ff = f.getAnnotation(MyField.class);// 取得指定注释      if(ff != null)      {        System.out.println("属性(" + f.getName() + "): " + ff.name() + " -- " + ff.type());      }    }  }}

 

4、解析输出结果。

类注释(name): T_BaseLog类注释(version): 2属性(log_time): addTime -- Date属性(log_level): log_level -- String属性(message): message -- String