浅谈Java中注解Annotation的定义、使用、解析

网友投稿 191 2023-05-24


浅谈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.annotatioaAJpmsOAn.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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解JAVA的封装
下一篇:基于Vue实现tab栏切换内容不断实时刷新数据功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~