java 注解 (转)
原贴:http://www.javaeye.com/topic/36659
?
?
?
Annotation在java的世界正铺天盖地展开,有空写这一篇简单的annotations的文章,算是关于Annotation入门的文章吧,希望能各位们能抛砖,共同学习......
?? 不讲废话了,实践才是硬道理.
?? 第一部分:了解一下java1.5起默认的三个annotation类型:
?? 一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
?? 一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
?? 一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
?? 如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。
?? 第二部分:讲一下annotation的概念先,再来讲一下怎样设计自己的annotation.
?? 首先在jdk自带的java.lang.annotation包里,打开如下几个源文件:
??
?? 1、源文件Target.java
- ?package?lighter.javaeye.com; ??????import?java.lang.reflect.Method; ?? ??import?java.util.HashSet; ?? ??import?java.util.Set; ?? ????public?class?TestAnnotation?{ ?? ????/** ??????*?author?lighter ??????*?说明:具体关天Annotation的API的用法请参见javaDoc文档 ??????*/?????????public?static?void?main(String[]?args)?throws?Exception?{ ?? ???????String??CLASS_NAME?=?"lighter.javaeye.com.JavaEyer"; ?? ???????Class??test?=?Class.forName(CLASS_NAME); ?????????Method[]?method?=?test.getMethods(); ?????????boolean?flag?=?test.isAnnotationPresent(Description.class); ?? ????????if(flag) ?? ????????{ ??????????????Description?des?=?(Description)test.getAnnotation(Description.class); ?? ????????????System.out.println("描述:"+des.value()); ?? ????????????System.out.println("-----------------"); ?? ????????} ?????????? ??????????//把JavaEyer这一类有利用到@Name的全部方法保存到Set中去 ?? ????????Set<Method>?set?=?new?HashSet<Method>(); ?? ????????for(int?i=0;i<method.length;i++) ?? ????????{ ??????????????boolean?otherFlag?=?method[i].isAnnotationPresent(Name.class); ?? ????????????if(otherFlag)?set.add(method[i]); ?? ????????} ??????????for(Method?m:?set) ?? ????????{ ??????????????Name?name?=?m.getAnnotation(Name.class); ?? ????????????System.out.println(name.originate()); ??????????????System.out.println("创建的社区:"+name.community()); ?? ????????} ???????} ??}??
package lighter.javaeye.com; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; public class TestAnnotation { /** * author lighter * 说明:具体关天Annotation的API的用法请参见javaDoc文档 */ public static void main(String[] args) throws Exception { String CLASS_NAME = "lighter.javaeye.com.JavaEyer"; Class test = Class.forName(CLASS_NAME); Method[] method = test.getMethods(); boolean flag = test.isAnnotationPresent(Description.class); if(flag) { Description des = (Description)test.getAnnotation(Description.class); System.out.println("描述:"+des.value()); System.out.println("-----------------"); } //把JavaEyer这一类有利用到@Name的全部方法保存到Set中去 Set<Method> set = new HashSet<Method>(); for(int i=0;i<method.length;i++) { boolean otherFlag = method[i].isAnnotationPresent(Name.class); if(otherFlag) set.add(method[i]); } for(Method m: set) { Name name = m.getAnnotation(Name.class); System.out.println(name.originate()); System.out.println("创建的社区:"+name.community()); } } }
??? 5、运行结果:
???? 描述:javaeye,做最棒的软件开发交流社区
???? -----------------
??? 创始人:robbin
??? 创建的社区:javaEye
??? 创始人:江南白衣?
??? 创建的社区:springside
?
原贴:http://www.javaeye.com/topic/36659