考生通行证 注册|考生通|忘记密码 使用帮助·加入收藏

 首页 > 计算机 > 正文
JAVA元数据注释初探
发布时间:2008-09-27 09:59:33   主站: www.kaosheng.com

  JAVA的元数据功能是JDK1.5才开始支持的,以前都没有,正因为是新支持的,所以有关于它的介绍挺少,用处也不太多,最近发现很多框架都可以把它用来配置一些东西,以代替以前比较复杂的XML配置。想像一下,在JAVA代码中直接写入注释来配置,那该是多么好的事情,让我们写习惯了代码和看习惯了代码的人来说,这无疑是一件很爽的事情。
  我们可以使用JAVA内置的注释内型,如果觉得不够用,可以定义自己的注释内型,定义如下
  /*
  * MyType.java
  *
  * Created on 2006年12月7日, 下午3:40
  *
  * To change this template, choose Tools   Template Manager
  * and open the template in the editor.
  */
  package testAnno;
  /**
  *
  * @author lbf
  */
  import java.lang.annotation.*;
  @Retention(RetentionPolicy.RUNTIME)
  @Target()
  public @interface MyType {
  String authorName();
  String lastModified();
  String bugFixes() default "ok";
  }
  这里我定义了一个我自己的注释类,声明方式和声明接口差不多,只不过在interface前面多了一个@符号.
  注释类也可以用注释类注释,如此下去.
  @Retention(RetentionPolicy.RUNTIME)
  这句表示它的保存范围是到RUNTIME,也就是运行时,这样在类运行的时候,我们也可以取到有关它的信息.
  @Target()
  这句表示它的适用对象,它可以用在哪里地方,我这里定义的是它可以用在类的定义和方法的定义上
  然后我们看我们是怎么为我们写的类加上注释的
  /*
  * Test1.java
  *
  * Created on 2006年12月7日, 下午3:34
  *
  * To change this template, choose Tools   Template Manager
  * and open the template in the editor.
  */
  package testAnno;
  /**
  *
  * @author lbf
  */
  import java.lang.annotation.*;
  @MyType(authorName="hadeslee",lastModified="20061207")
  public class Test1 {
  /** Creates a new instance of Test1 */
  public Test1() {
  }
  @Deprecated
  @MyType(authorName="hadeslee",lastModified="20061207",bugFixes="what")

  public void doSth(){
  }
  @MyType(authorName="hadeslee",lastModified="20061207",bugFixes="what")
  public void doAnother(){
  }
  }
  加了元数据的类和不加元数据的类差不多,只不过如果你的元数据注释如果是运行时的话,你的类文件可能会比不加元数据大一些,因为它必须把一些注释的信息写入到class文件中去,我们已经注释了我们的类,现在我们来看一下,我们如何去取我们的注释,
  /*
  * GetAnno.java
  *
  * Created on 2006年12月7日, 下午3:46
  *
  * To change this template, choose Tools   Template Manager
  * and open the template in the editor.
  */
  package testAnno;
  /**
  *
  * @author lbf
  */
  import java.lang.annotation.*;
  import java.lang.reflect.*;
  public class GetAnno {
  /** Creates a new instance of GetAnno */
  public GetAnno() {
  }
  public static void main(String[] args)throws Exception {
  Test1 t=new Test1();
  Class c=Test1.class ;
  Annotation[] as= c.getDeclaredAnnotations();
  for(Annotation an:as){
  System.out.println("类Test1的注释"+an);
  }
  Method med=c.getDeclaredMethod("doSth");
  Annotation[] ass=med.getDeclaredAnnotations();
  for(Annotation an:ass){
  Class<!--/sp-->extends Annotation> clazz=an.annotationType();
  Annotation[] ased=clazz.getAnnotations();
  for(Annotation ad:ased){
  System.out.println("注释的注释:"+ad);
  }
  System.out.println("方法doSth的注释:"+an);
  }
  }
  }
  此程序输出如下
  类Test1的注释@testAnno.MyType(bugFixes=ok, authorName=hadeslee, lastModified=20061207)
  注释的注释:@java.lang.annotation.Documented()
  注释的注释:@java.lang.annotation.Retention(value=RUNTIME)
  方法doSth的注释:@java.lang.Deprecated()
  注释的注释:@java.lang.annotation.Retention(value=RUNTIME)
  注释的注释:@java.lang.annotation.Target(value=[TYPE, METHOD])
  方法doSth的注释:@testAnno.MyType(bugFixes=what, authorName=hadeslee, lastModified=20061207)
  从这代码里,我们可以看出,取注释其实很简单,就是利用反射机制来取的.不过我们要特别注意到的一点是,我们不但可以取我们定义的类的注释,也可以取注释的注释,我们这里只取到了MyType的注释,其实还可以往下取,在取的过程中,我们可以看到这些元数据注释类都用了哪些注释。

 
  现在有 人对本文发表评论 查看所有评论 用户名: 密码: 匿名



 
 
资料中心
推荐学校 推荐课程
wqer
沈阳橙色学校
北文学校
新动力教育
北京中大英才教育咨询中心
上海郎恩进修学校
环球友好国际教育
北京联合大学广告学院
上海荐才职业技能培训中心
上海恩波学校
知识交流  
试题下载  
在Oracle9i中,如何监...
拥有归档日志如何恢复一个丢失...
批量删除Oracle数据库的...
批量删除Oracle数据库的...
分析Oracle数据库日志文...
分析Oracle数据库日志文...
sql.bsq与数据库的创建
精彩资讯  
中国首台“超级计算机”诞生 紧随美国
黑龙江省审计厅加大计算机审计中级人才培养
工业控制计算机行业座谈 积极应对金融危机
新年好彩头 买曙光PHPC100计算机赠送G...
宏正推出首款笔电型USB KVM多计算机切换...
廖了以赴桃园机场了解计算机修复后通关情况
硬盘巨无霸希捷急需瘦身
计算机病毒预报
中国诞生世界十强百万亿次超级计算机
物竞天择适者生存 找寻IT产业耐寒基因
about us | 网站简介 | 广告服务 | 联系我们 | 版权&免费声明 | 网站地图 | 合作加盟 | 申请友情链接 | 网站帮助 | 友情联盟 | 意见留言
版权所有:中国考生网    互联网证书:辽ICP证020145号