Posted on 2010-03-09 16:25
asdtiang 阅读(316)
评论(0) 编辑 收藏 所属分类:
JAVA
元数据是关于数据的数据。在编程语言上下文中,元数据是
添加到程序元素如方法、字段、类和包上的额外信息。
元数据的作用
-
一般来说,元数据可以用于创建文档,跟踪代码中的依赖
性,执行编译时检查,代码分析。
-
元数据还可用于协助程序元素与框架或者EJB、
EMF 和 TestNG这样的工具之间的通信。EJB
3.0就广泛地应用了Java元数据,通过元数据来实现声明性请求企业服务,依赖性以及资源注入,消除了严格的EJB组件模型约束,并且取代了复杂的
XML配置文件。
-
元数据甚至使我们可以不用修改核心语言,就能够在 Java
语言中添加新功能,使核心语言成为一种开放式语言。在纯面向对象的语言中实现AOP就是使用元数据进行语言扩展的一个很好的例子。
AspectWerkz、JBoss AOP以及AspectJ5
使用元数据将类的语义转换为一个aspect、将数据字段转换为一个pointcut、将方法转换为一个advice,等等。
Java平台的元数据
Java 元数据(Annotation)是 J2SE 5.0
(研发历时近三年,于2004年9月30日正式发布,代号为“Tiger”)新增加的功能之一,它在JSR-175规范中有详细定义。该机制允许在
Java
代码中添加自定义注释,并允许通过反射(reflection),以编程方式访问元数据注释。通过提供为程序元素附加额外数据的标准方法,元数据功能具有
简化和改进许多应用程序开发领域的潜在能力,其中包括配置管理、框架实现和代码生成。
Annotation不直接影响程序的语义。然而,开发和部署工具可以读取这些注释,并以某种形式处理这些注释,可能生成其他
Java源程序、XML配置文件或者要与包含注释的程序一起使用的其他组件,从而影响运行状态的程序的语义。注释可以从源代码中读取,从编译后
的.class文件中读取,也可以通过反射机制在运行时读取。
Annotation具有以下的一些特点:
- 元数据以标签的形式存在于Java代码中。
- 元
数据描述的信息是类型安全的,即元数据内部的字段都是有明确类型的。
- 元数据需要编译器之外的工具额外的处理用来生成其它的程
序部件。
- 元数据可以只存在于Java源代码级别,也可以存在于编译之后的Class文件内部。
事实上,早在JDK5.0推出语言级的元数据机制Annotation以前,就一直存在对元数据的需求。但是由于没有提供表达元数据
的标准机制,出现了各种解决方案。下面罗列了一些例子
- transient 关键字
- Serializable
标记接口
- xml 部署描述文件
- manifest.mf
文件
- Javadoc 标记(将文档直接写在源程序里,极大的方便了文档的编写)
- XDoclet(使
用类似于JavaDoc的语法撰写描述信息,并使用工具生成描述文件)
这
些方法都存在一定的局限性,比如使用关键字不具有扩展性,用户自定义新的关键字;标记接口没有提供额外的信息,它们不能带有参数,并且只能处理类,而不能
处理字段或方法或包。Javadoc和XDoclet标记不会被编译器检查。
最后,我们再详细的对比一下Annotation和XML部署描述文件的优劣
- XML配置文件与代码文件分离,不利于一致性维护,缺乏在运行时的反射机制。而Annotation与代码一起被编译器处理,并能够
在运行时访问。
- 通常XML配置文件都很复杂而且冗长,为了配置代码,XML文
件必须复制许多信息:比如代码中类名字和方法名字。Java注释则不同,它是代码的一部分,不需要额外的引用就可以指明配置信息。
- XML配置文件是文本文件,没有显式的类型支持,需要到运行时刻才能发现隐藏的错误。而
Annotation是类型安全的,它会被编译器检查。
- XML文件可以表达复杂的关系,但是在注释中我们却很难表达
复杂的或层次的结构。
- XML配置文件是在代码之外被单独处理的,也就是说基于XML的配置信息不是硬编码的,可以部
署的时候进行修改。而修改Annotation则需要进行重新编译,不过我们可以利用AOP提供的机制为已有的代码添加Annotation。通过部署不
同的AOP模块,就能使代码具有不同的Annotation,但比起直接修改XML显得复杂。
总
而言之,注释是简单易用的,并且对大多数应用来说已经足够了。而XML文件更复杂,但具有部署的灵活性,因而被用来处理与部署相关的决策。注释与XML配
置文件可以一起使用。由于注释只能保存相当少的配置信息,只有预先集成的框架组件(类似在框架组件中已经完成了大多数预备工作)可以广泛地把注释作为配置
选项。而XML配置文件作为一个可选的重载机制,可以用于改变注释的默认行为。
天苍苍,野茫茫,风吹草底见牛羊