此例子,用于說明如何在Java中對“注解 Annotation”的定義、使用和解析的操作。注解一般用于自定義開發(fā)框架中,至于為什么使用,此處不作過多說明,這里只說明如何使用,以作備記。下面例子已測試,可以正常運行通過。
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; // 日志內(nèi)容
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