自定义Java annotation及解析和使用
用@interface定义一个annotation:
package annotationTest;import java.lang.annotation.*;@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {String author() default "Jerry";String version() default "1.0";String date();String comment();
}
新建一个类,给其方法添加上刚才创建的注解:
package annotationTest;// Jerry change for demopublic class AnnotationExample {@Override@MethodInfo(author = "xxx",version = "1.0",date = "2015/03/26",comment = "override toString()")public String toString() {return "AnnotationExample{}";}@Deprecated@MethodInfo(comment = "deprecated method", date = "2015/03/26")public static void oldMethod() {System.out.println("old method, don't use it.");}@MethodInfo(author = "Pankaj", comment = "Main method", date = "Nov 17 2012", version = "1.0")public static void genericsTest() {oldMethod();}
}
打印的输出:
@annotationTest.MethodInfo(version="1.0", author="xxx", date="2015/03/26", comment="override toString()") in method:public java.lang.String annotationTest.AnnotationExample.toString()Method with revision no 1.0 = public java.lang.String annotationTest.AnnotationExample.toString()
@annotationTest.MethodInfo(version="1.0", author="Pankaj", comment="Main method", date="Nov 17 2012") in method:public static void annotationTest.AnnotationExample.genericsTest()Method with revision no 1.0 = public static void annotationTest.AnnotationExample.genericsTest()
@java.lang.Deprecated(forRemoval=false, since="") in method:public static void annotationTest.AnnotationExample.oldMethod()
@annotationTest.MethodInfo(version="1.0", author="Jerry", comment="deprecated method", date="2015/03/26") in method:public static void annotationTest.AnnotationExample.oldMethod()Method with revision no 1.0 = public static void annotationTest.AnnotationExample.oldMethod()
同理,新建一个description注解,用来修饰People类:
package annotationTest;import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.*;@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {String desc();String author();int age() default 18;
}
package annotationTest;import java.lang.annotation.Annotation;
import java.lang.reflect.Method;@Description(author = "Jerry", desc = "Class annotation", age = 35)
public class People {@Description(author = "Jerry 2", desc = "method annotation", age = 35)public void hello(){}@SuppressWarnings({ "rawtypes", "unchecked" })public static void main(String[] arg){try {// 使用类加载器加载类Class c = Class.forName("annotationTest.People");// 找到类上面的注解boolean isExist = c.isAnnotationPresent(Description.class);// 上面的这个方法是用这个类来判断这个类是否存在Description这样的一个注解if (isExist) {// 拿到注解实例,解析类上面的注解Description d = (Description) c.getAnnotation(Description.class);System.out.println(d.desc());}//获取所有的方法Method[] ms = c.getMethods();// 遍历所有的方法for (Method m : ms) {boolean isExist1 = m.isAnnotationPresent(Description.class);if (isExist1) {Description d1=m.getAnnotation(Description.class);System.out.println(d1.desc());}}//另一种解析方法for (Method m : ms) {//拿到方法上的所有的注解Annotation[] as=m.getAnnotations();for (Annotation a : as) {//用二元操作符判断a是否是Description的实例if (a instanceof Description) {Description d=(Description) a;System.out.println(d.desc());}}}} catch (ClassNotFoundException e) {e.printStackTrace();}}}
输出:
Class annotation
method annotation
method annotation
自定义Java annotation及解析和使用相关推荐
- 自定义 Java Annotation ,读取注解值
1. 首先是自定义注解: Java代码 package cn.veji.hibernate.po; import java.lang.annotation.ElementType; import ...
- Java Annotation
为什么80%的码农都做不了架构师?>>> 第1部分 Annotation架构 先看看Annotation的架构图: 从中,我们可以看出: (01) 1个Annotation 和 ...
- 可以自定义模板的ide_将IDE检查应用于自定义Java批注
可以自定义模板的ide J2SE 5中注释的引入改变了我们编写和处理Java的方式. 除了Java SE的预定义注释外 ,框架,IDE和工具包还引入了自己的自定义注释 . Checker框架提供了一些 ...
- 将IDE检查应用于自定义Java批注
J2SE 5中注释的引入改变了我们编写和处理Java的方式. 除了Java SE的预定义注释外 ,框架,IDE和工具包还引入了自己的自定义注释 . Checker框架提供了一些示例,说明如何使用自定义 ...
- Java Annotation认知(包括框架图、详细介绍、示例说明)
摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...
- 开发 Spring 自定义视图和视图解析器
Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring ...
- Java Annotation手册
版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 作者:cleverpig(作者的Blog: http://blog.matrix.org.cn/page/cle ...
- 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- Java 面试知识点解析(三)——JVM篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
最新文章
- 基于U-Net图像分割的划痕缺陷分割(课程设计)
- 使用.NET自带的类实现DataGrid报表的打印。
- redis的导入导出需要特别注意的地方
- ActiveX(五)更好的“ActiveX”?
- 「从源码中学习」面试官都不知道的Vue题目答案
- dubbo笔记+源码刨析
- 骁龙660_高通骁龙660可以带动6g运行内存吗?
- (全部)2008重磅出击——微软Windows Server 2008实战攻略系列
- java学习(17):巩固练习
- 动手学无人驾驶(1):交通标志识别
- JS左侧竖向滑动菜单
- 递归计算二叉树的叶子节点个数
- 7000条短信接口!福利赠送!
- html5建站模板怎么用,怎么用模板建网站
- Linux实验13_进程管理及任务计划.docx
- aiohttp+aiofiles异步爬虫光速下载图片
- android和iOS平台的崩溃捕获和收集
- linux系统深度评测,真国产,深度linux系统评测第二集
- 关于 public.resource.org
- 通过外部Python调用FreeCAD
热门文章
- [Everyday Mathematics]20150113
- 采用静态配置文件方式实现AOP
- 第一章:Java语言概述
- spring框架学习1:搭建测试
- Ajax学习系列——向服务器发送请求
- 机器学习基础一(TP,TN,FP,FN等)
- 设计模式六大原则(5)——迪米特原则
- 在删除一个指针之后,一定将该指针设置成空指针(即在delete *p之后一定要加上: p=NULL)...
- 使用Silverlight 2 和 VS 2008创建“Hello World”程序
- eclipse搭建Android开发环境