# What Is Annotation Java平台元数据 是JDK1.5引入的一个语法糖,它主要用来当作元数据,简单的说就是用于解释数据的数据。 它在JSR-175规范中有详细定义。 是一种应用于类、方法、参数、变量、构造器及包声明中的特殊修饰符 ## 背景 为什么要引入注解? 自 1.0 版以来在 Java 中一直存在对元数据的需求,Java 从来没有提供记录元数据的标准机制, 因而编程人员找到了各种技巧和窍门使用任意的工具来添加元数据,通用性不好。 Annotation定义了一种标准的描述元数据的方式。 允许在 Java 代码中添加自定义注释,并允许通过反射(reflection),以编程方式访问元数据注释。 通过提供为程序元素附加额外数据的标准方法,元数据功能具有简化和改进许多应用程序开发领域的潜在能力。 值得注意的是,注解不是代码本身的一部分,注解主要针对的是编译器和其它工具软件(SoftWare tool)。 ## 应用 很多开源框架都使用了注解,例如Spring、MyBatis、Junit。 ## 与XML XML配置文件与代码文件分离,不利于一致性维护,缺乏在运行时的反射机制。 而Annotation与代码一起被编译器处理,并能够在运行时访问。 通常XML配置文件都很复杂而且冗长,为了配置代码,XML文件必须复制许多信息:比如代码中类名字和方法名字。 Java注释则不同,它是代码的一部分,不需要额外的引用就可以指明配置信息。 XML配置文件是文本文件,没有显式的类型支持,需要到运行时刻才能发现隐藏的错误。 而Annotation是类型安全的,它会被编译器检查。 XML文件可以表达复杂的关系,但是在注释中我们却很难表达复杂的或层次的结构。 XML配置文件是在代码之外被单独处理的,也就是说基于XML的配置信息不是硬编码的,可以部署的时候进行修改。 而修改Annotation则需要进行重新编译,不过我们可以利用AOP提供的机制为已有的代码添加Annotation。 通过部署不同的AOP模块,就能使代码具有不同的Annotation,但比起直接修改XML显得复杂。 总而言之,注释与XML配置文件可以一起使用。 注释是简单易用的,并且对大多数应用来说已经足够了。 而XML文件更复杂,但具有部署的灵活性,因而被用来处理与部署相关的决策。 由于注释只能保存相当少的配置信息,只有预先集成的框架组件(类似在框架组件中已经完成了大多数预备工作)可以广泛地把注释作为配置选项。 而XML配置文件作为一个可选的重载机制,可以用于改变注释的默认行为。