Java中注解Annotation的定义 使用 解析

时间:2017-04-14 08:10:38 

此例子,用于说明如何在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

看不过瘾?点击下面链接!
本站微信公众号:gsjx365,天天有好故事感动你!

相关电脑知识

美图欣赏

电脑知识排行榜