Java Annotation Processors:Usage&应用

时间:2011-09-26 18:04:07

标签: java oop annotations

我对Java EE开发相对较新,虽然我理解注释是什么,以及如何使用它们,但是当我们理解为什么有人需要时,我很难“看到森林穿过树林”编写和处理他们自己的注释。

在什么情况下你甚至需要自定义注释?

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

感谢你在正确方向上的任何推动!

4 个答案:

答案 0 :(得分:3)

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

  • 如果JAX-RS不存在,您可能会想到如何使用注释来表示方法的REST操作,例如描述here
  • 的方法
  • 如果JUnit没有实现注释来表示this article中的测试方法,你可能会认为做同样的事情
  • 如果Spring没有实现验证,那么您可能会出现这样的问题,例如here
  • 如果Java本身没有提供文档注释,您可能会使用自己描述的自定义注释here

要回答您的问题,每次您希望通过其他框架未涵盖的其他元数据来丰富您的课程时,您可能会考虑创建自己的注释。虽然,许多聪明的人都涵盖了注释的常见用法,但这并不妨碍您在未来提出自己的用法,因此需要自己的自定义注释和处理。

答案 1 :(得分:1)

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

简单地说:每当你实现自己的框架时 - 以某种方式 - 将代码“粘合”在一起,用你在构建(或运行)时处理的某种“元”信息丰富代码ASO

一些众所周知的例子包括:依赖注入,对象关系映射,反射,文档等。

答案 2 :(得分:0)

有很多原因,但它们显然是针对特定应用的。

例如,我们注释域类是内部安全框架感知的。我们处理我们自己的注释以用于文档目的。我们有状态机注释,可以为配置和文档目的构建有向图。

有些是在运行时被询问,有些是在文档处理期间,有些是在启动时,有些是有多种用途。

框架注释开始是自定义的,然后当它转换进入框架并发布时,它们看似“显而易见”和“内置”,但它们并不一定总是打算是。

答案 3 :(得分:0)

恕我直言,他们是你可以在Java中使用的最好的东西之一,他们节省了我的年龄。我举个例子:几天前我正在编写一个图像处理应用程序。所有过滤器都扩展了一个名为Filter的基类,其中许多都具有对比度,亮度等属性......现在每个属性都有一个默认值,一个带有min和max的范围,一个适合gui的名称。然后有过滤器的属性,我希望GUI通过控件公开,其他我没有。所以我创建了你将使用的@FilterPropertyAnnotation:

...
@FilterAnnotation(name = "Image contrast", default = 0.0D, min = -100D, max = 100D)
public double getContrast(){
...
}

然后,使用反射,每次用户在GUI中选择一个过滤器时,它将扫描过滤子类的方法,查看哪些具有注释,并仅显示我用注释标记的属性的相应控件,所有具有正确的默认值和比例。我想不出更简单或更快的方式来做这样的事情。

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