简单谈谈java自定义注解
java在1.5开始引入了注解,目前流行的框架都在用注解,可想而知注解的强大之处。
以下通过自定义注解来深入了解java注解。
一、创建自定义注解
package com.sam.annotation; import java.lang.annotation.*; /** * @author sam * @since 2017/7/13 */ @target({elementtype.method, elementtype.field}) @retention(retentionpolicy.runtime) @inherited @documented public @interface mymessage { string name() default "sam"; int num() default 0; string desc(); }
说明:
@target、@retention、@inherited、@documented为元注解(meta-annotation),它们是负责注解其他注解的。
1、target:指明注解支持的使用范围,取值可以参考枚举elementtype,以下:
elementtype.type //类、接口、枚举
elementtype.field //属性
elementtype.method //方法
elementtype.parameter //参数
elementtype.constructor //构造器
elementtype.local_variable //局部变量
elementtype.annotation_type //注解
elementtype.package //包
2、retention:指明注解保留的的时间长短,取值参考枚举retentionpolicy,一下:
source //源文件中保留
class //class编译时保留
runtime //运行时保留
3、inherited:指明该注解类型被自动继承。如果一个annotation注解被@inherited修饰,那么该注解作用于的类 的子类也会使用该annotation注解。
4、documented:指明拥有这个注解的元素可以被javadoc此类的工具文档化。
二、创建测试类,使用自定义注解
package com.sam.annotation; /** * @author sam * @since 2017/7/13 */ public class annotationtest { @mymessage(num = 10, desc = "参数a") private static int a; @mymessage(name = "sam test", desc = "测试方法test") public void test() { system.out.println("test"); } }
在该类中的属性和方法,使用了自定义的注解,并指明了参数。
那么现在就需要解析自定义的注解。
三、解析注解
使用反射机制处理自定义注解
package com.sam.annotation; import java.lang.reflect.field; import java.lang.reflect.method; /** * 使用反射处理注解 * * @author sam * @since 2017/7/13 */ public class mymessageprocessor { public static void main(string[] args) { try { //加载annotationtest.class类 class clazz = mymessageprocessor.class.getclassloader().loadclass("com.sam.annotation.annotationtest"); //获取属性 field[] fields = clazz.getdeclaredfields(); //遍历属性 for (field field : fields) { mymessage mymessage = field.getannotation(mymessage.class); system.out.println("name:" + mymessage.name() + " num:" + mymessage.num() + " desc:" + mymessage.desc()); } //获取类中的方法 method[] methods = clazz.getmethods(); //遍历方法 for (method method : methods) { //判断方法是否带有mymessage注解 if (method.isannotationpresent(mymessage.class)) { // 获取所有注解 method.getdeclaredannotations(); // 获取mymessage注解 mymessage mymessage = method.getannotation(mymessage.class); system.out.println("name:" + mymessage.name() + " num:" + mymessage.num() + " desc:" + mymessage.desc()); } } } catch (classnotfoundexception e) { e.printstacktrace(); } } }
运行mymessageprocessor 得到结果:
name:sam num:10 desc:参数a name:sam test num:0 desc:测试方法test process finished with exit code 0
具体定制注解所实现的内容,可以在mymessageprocessor.java中进行修改。
自此,已经对java的自定义注解有简单的了解。
以上这篇简单谈谈java自定义注解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 空条承太郎的妻子是谁!
下一篇: 观致5SUV怎么样,观致5性价比高吗!