注释在Java或任何其他编程语言中如何在内部工作?

注释在Java或任何其他编程语言中如何在内部工作?,java,annotations,Java,Annotations,我很难理解注释的重要性和好处,因此有两个关于注释的问题: 与XML配置相比,注释有什么好处 注释如何在内部工作 可以说注释紧密地绑定了应用程序,而XML配置应用程序是松散耦合的,这样说公平吗 如果能用示例比较XML配置的优缺点,我将不胜感激,这样对我理解会更有帮助 问候 关于你的第一个问题 我个人认为,有两个标准 注释可以简化元数据吗? 如果注释没有减少必须提供的元数据的数量(在大多数情况下是这样的),那么就不应该使用注释 对元数据的更改会破坏应用程序中的行为吗 如果没有,那么当系统在生

我很难理解注释的重要性和好处,因此有两个关于注释的问题:

  • 与XML配置相比,注释有什么好处
  • 注释如何在内部工作
  • 可以说注释紧密地绑定了应用程序,而XML配置应用程序是松散耦合的,这样说公平吗
  • 如果能用示例比较XML配置的优缺点,我将不胜感激,这样对我理解会更有帮助


    问候

    关于你的第一个问题

    我个人认为,有两个标准

  • 注释可以简化元数据吗? 如果注释没有减少必须提供的元数据的数量(在大多数情况下是这样的),那么就不应该使用注释

  • 对元数据的更改会破坏应用程序中的行为吗

    如果没有,那么当系统在生产中运行时,您可以轻松地应用更改。在这种情况下,外部配置文件是存放元数据的最佳位置,因为您不希望必须重新编译代码才能进行更改

  • 关于你的第二个问题


    重要环节:


    回答第一个问题,IMO最大的好处是编译器集成的潜力。我可以编写一个注释处理器,它可以验证与注释应用程序相关的一些语义。如果相同的信息是XML文档的一部分,那么这种编译时检查是不可能的(或者至少要困难得多)


    为了回答第二个问题,注释本身并不真正在内部“工作”,因为它们没有任何固有的执行语义。它们是源级实体,可以保留在类文件中,也可以不保留。可以在编译源代码的过程中处理,如果它们保留在类文件中,则可以通过反射进行访问。

    注释和XML描述符都用于在常规代码的基础上描述某些元数据。主要区别在于,对于注释,您只需要处理一个包含代码和元数据的文件。它也是注释的一大优势,因为它减少了移动部件的数量并提高了生产率

    另一方面,注释的缺点是它们将代码和使用这些注释操作的系统或框架绑定在一起。这使得将来更难区分这些

    例如,如果使用Hibernate注释,则可以使用Hibernate绑定模型对象。如果选择切换到不同的框架,则必须从代码中删除Hibernate注释

    但实际上,您不太可能经常更改框架。在现有代码基础上更改框架可能很困难,通常还有许多其他原因。通常,注释是一个不错的选择


    至于它们是如何工作的,注释是语言的一部分,由编译器和其他工具进行处理,并且根据保留情况,可以包含在生成的字节码中以供运行时使用。最终,由消费者决定如何使用注释。

    这并没有回答这个问题,我试图了解注释实际上是如何在内部工作的,使用注释的好处是什么,使用注释总是正确的,还是xml配置在某些情况下赢得了比赛?请查看链接:还有,包括在我的回答中。对于您的第二条评论
    可以更改应用程序中的元数据中断行为
    ,这在大多数情况下都是正确的,因为使用注释时,您与应用程序紧密耦合?IIRC、Spring注释都有
    保留策略
    运行时
    ,因此,它们可以被反射地读取。然后,Spring框架可以通过检查类文件来确定需要注入什么。