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
Java中注解Annotation的定义、使用、解析的更多相关文章
- 沉淀再出发:java中注解的本质和使用
沉淀再出发:java中注解的本质和使用 一.前言 以前XML是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,XML的内容也越来越复杂,维护成本变高.于是就有人提 ...
- Java:注解Annotation(元数据)
本文内容: 注解Annotation的介绍 基本注解的用法 自定义注解 首发日期:2018-07-28 注解Annotation的介绍 Annotation是代码中的特殊标记,能够在编译.类加载.运行 ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- Java中的Annotation(2)----Annotation工作原理
Java中的Annotation(2)----Annotation工作原理 分类: 编程语言2013-03-18 01:06 3280人阅读 评论(6) 收藏 举报 上一篇文章已经介绍了如何使用JDK ...
- JAVA中关于数组的定义
前些日子,有网友问:在JAVA中 int[] a 这样定义的数组和 int a[] 定义的数组有什么区别? 当时没有细看,直接回复说,在JAVA中,两者是一样的,没有区别. 回头仔细看时,还是稍有区别 ...
- 关于Java中注解的总结
注解用来给类声明附加额外信息,可以标注在类.字段.方法等上面,编译器.JVM以及开发人员等都可以通过反射拿到注解信息,进而做一些相关处理 Java中注解的知识结构图 常用注解 @Override ...
- 一起来看一下Java中的Annotation注解
目录: 一. 什么是Annotation 二. Annotation的作用 2.1 编译器使用到的注解 2.2 .class文件使用到的注解 2.3 运行期读取的注解 三. 定义Annotation ...
- java中注解的使用与实例 (二)
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 【转】java中注解的使用与实例
原文:http://www.cnblogs.com/pepcod/archive/2013/02/20/2918719.html java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单. ...
随机推荐
- [Express] Level 4: Body-parser -- Post
Parser Setup Assume the body-parser middleware is installed. Now, let's use it in our Express applic ...
- impdp的一些实际问题解决方法
之前在http://blog.csdn.net/bisal/article/details/19067515写过一篇关于expdp和impdp的实践的帖子.今天碰到个问题,有些内容没有介绍全,这里再补 ...
- 配置yii访问远程数据库
1.将hdp002的数据库放到hdp004后,发现yii出现找不到表messages的迹象.用hdp002远程登录hdp004后发现,原来是hdp004没有授权给hdp002,用下面的sql语句即可: ...
- h5-2
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- Spring MVC 中 HandlerInterceptorAdapter的使用--转载
原文地址:http://blog.csdn.net/liuwenbo0920/article/details/7283757 一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可 ...
- 技术随笔 查找速度最快的Google IP
转:http://www.xiumu.org/technology/the-find-the-fastest-in-the-google-ip.shtml 体验秒开GOOGLE的感觉! 在http:/ ...
- MySQL无视密码进入Server
在[mysqld]的段中加上一句:skip-grant-tables 如下 [mysqld] skip-grant-tables 即可不输入密码就可以进入mysql server,然后就可以随便修改数 ...
- Ubuntu上手动安装nginx
最近需要利用nginx上搭建一个网站,因此在自己的电脑上安装了nginx,现在分享一下自己在安装过程及遇到的问题. 1.下载需要的nginx版本的安装包. axel -n http://nginx.o ...
- Tfs服务器迁移(更改IP)后客户端(vs2013)配置方法
一.前言 公司开发项目需要进驻客户现场,局域网中的tfs代码服务器有时会有修改ip的情况发生.服务器ip修改后在vs2013中更改服务器ip地址非常麻烦,有些时候需要将代码重新进行映射.多次试验后将可 ...
- 【阿里云产品公测】阿里云ACE配置全程图解,详细到不行!
作者:阿里云用户sofia 看过阿里云社区的其他技术大姥们的评测教程,感觉还是不够详细,对于一个第一次接触ace.新浪sae这类的应用来说还是比较陌生的.我最喜欢写教程了,不过我有我的风格,那就是简单 ...