zoukankan      html  css  js  c++  java
  • 元数据 Metadata

    元数据是关于数据的数据。在编程语言上下文中,元数据是添加到程序元素如方法、字段、类和包上的额外信息。

    什么是元编程?
    运行时动态创建类型的功能称为元编程。

    从学习UML就知道meta-的重要性了,再后来了解到MOF(MetaObjectFacility)就更加着迷这个Meta-。
    Meta-  在...之中... 对于想真正了解一个Framework,了解它的Meta东西是十分重要的。不管任何一个Framework,肯定存在着它自己的MetaData的,. NET作为一个Framework自然也存在好多元数据,我们编写应用程序中如果可以灵活的运用元编程技术,肯定可以使我们的程序更加灵活,高效甚至自我 生成。

    下图展示了.NET Framework中和元编程有关的类:

    元数据的作用

        *
            一般来说,元数据可以用于创建文档,跟踪代码中的依赖性,执行编译时检查,代码分析。
        *
          元数据还可用于协助程序元素与框架或者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配置文件作为一个可选的重载机制,可以用于改变注释的默认行为。

  • 相关阅读:
    收集邮票
    CF235B Let's Play Osu!
    [SHOI2002]百事世界杯之旅
    路径统计
    fastText 训练和使用
    由最多N个给定数字集组成的数字 Numbers At Most N Given Digit Set
    动态规划-划分数组的最大和 Split Array Largest Sum
    子序列宽度求和 Sum of Subsequence Widths
    Contest 158
    Bert
  • 原文地址:https://www.cnblogs.com/silva/p/1524086.html
Copyright © 2011-2022 走看看