Java注释处理器:使用与维护;应用

Java注释处理器:使用与维护;应用,java,oop,annotations,Java,Oop,Annotations,我对JavaEE开发比较陌生,虽然我了解什么是注释以及如何使用注释,但在理解为什么任何人都需要编写和处理自己的注释时,我很难“从树中看到森林” 在什么情况下,您甚至需要自定义注释 我确信它们在某种程度上是至关重要的,我只是因为某种原因看不到它们的有用性 感谢您在正确的方向上所做的一切努力 原因有很多,但它们显然是特定于应用程序的 例如,我们将域类注释为具有内部安全框架意识。我们处理自己的注释以用于文档编制。我们有状态机注释,用于构建用于配置和文档目的的有向图 有些是在运行时查询的,有些是在文档处

我对JavaEE开发比较陌生,虽然我了解什么是注释以及如何使用注释,但在理解为什么任何人都需要编写和处理自己的注释时,我很难“从树中看到森林”

在什么情况下,您甚至需要自定义注释

我确信它们在某种程度上是至关重要的,我只是因为某种原因看不到它们的有用性


感谢您在正确的方向上所做的一切努力

原因有很多,但它们显然是特定于应用程序的

例如,我们将域类注释为具有内部安全框架意识。我们处理自己的注释以用于文档编制。我们有状态机注释,用于构建用于配置和文档目的的有向图

有些是在运行时查询的,有些是在文档处理过程中查询的,有些是在启动时查询的,有些有多种用途


框架注释一开始是定制的,然后当它变成一个框架并发布时,它们看起来只是“明显的”和“内置的”,但它们并不一定总是有意的。

例如,有一些关于StackOverflow的相关讨论

简言之:无论何时,只要你实现了自己的框架——以某种方式将代码“粘合”在一起,就会用某种“元”信息丰富代码,这些信息是你在构建(或运行)时a.s.o.处理的


一些著名的例子包括:依赖注入、对象关系映射、反射、文档等。

自定义注释有很多用法。您可能会认为很难找到我们创建一个的原因,因为很多都是在其他框架中定义的。为了基本上回答您自己的问题,您应该问“如果这些框架不存在会发生什么,我是否需要创建注释的自定义使用?”可能的答案是肯定的。以下是几个例子中的一些:

  • 如果JAX-RS不存在,您可能会考虑如何使用注释来表示所描述的方法的REST操作
  • 如果JUnit没有像中那样实现表示测试方法的注释,那么您可能会考虑做同样的事情
  • 如果Spring还没有实现验证,那么您可能也会想到类似的方法
  • 如果Java本身没有为文档提供注释,您可能会使用您自己的自定义注释

为了回答您的问题,每当您希望通过其他框架未涵盖的其他元数据来丰富类时,您可能会考虑创建自己的注释。虽然很多聪明人都会介绍注释的常见用法,但这并不妨碍您在将来提出自己的用法,从而满足您对自定义注释和处理的需求。

我认为它们是Java中可以使用的最好的东西之一,可以节省时间。我给你举个例子:几天前我在写一个图像处理应用程序。所有过滤器都扩展了一个称为过滤器的基类,其中许多过滤器具有对比度、亮度等特性。。。现在,每个属性都有一个默认值,一个包含最小值和最大值的范围,一个适合gui的名称。还有一些我希望GUI通过控件公开的过滤器属性,还有一些我没有公开的。因此,我创建了@FilterPropertyAnotation,您可以这样使用:

...
@FilterAnnotation(name = "Image contrast", default = 0.0D, min = -100D, max = 100D)
public double getContrast(){
...
}
然后,使用反射,每次用户在GUI中选择过滤器时,它都会扫描该过滤器子类方法,查看哪些方法具有注释,并仅为我标记了注释的属性显示适当的控件,所有这些方法都具有正确的默认值和比例。我想不出一个更简单或更快的方法来做这样的事情


注释对我来说是Java中最好的东西。

谢谢您的回答@Dave。一个快速跟进的问题:那么说注释主要用于其他JAR/依赖项可以检索有关注释代码的特定于上下文的元数据是否安全呢。。。这就是注释所做的,提供特定于上下文的元数据,对吗?这只是他们提供给谁的问题:应用程序内部、应用程序服务器、ORM等等。