簡體   English   中英

Java注釋處理器:用法和應用程序

[英]Java Annotation Processors: Usage & Applications

我對Java EE開發相對較新,雖然我理解注釋是什么,以及如何使用它們,但在理解為什么有人需要編寫和處理自己的時候,我很難“看到森林穿過樹林”。 注釋。

在什么情況下你甚至需要自定義注釋?

我確信它們在某種程度上是至關重要的,我只是因為某種原因看不出它們的用處。

感謝任何正確方向的推動!

自定義注釋有很多用法。 您可能認為很難找到我們創建一個的原因,因為許多已在其他框架中定義。 為了基本回答你自己的問題,你應該問“如果那些框架不存在會發生什么,我是否需要創建自定義的注釋使用?” 可能的答案是肯定的。 以下是一些例子:

  • 如果JAX-RS不存在,您可能會想到如何使用注釋來表示方法的REST操作,例如此處描述的方法
  • 如果JUnit沒有像本文中那樣實現注釋來表示Test方法,那么您可能會想到做同樣的事情
  • 如果Spring沒有實現驗證,那么你可能會遇到這樣的問題
  • 如果Java本身沒有提供文檔注釋,您可能會使用此處描述的自定義注釋

要回答您的問題,每次您希望通過其他框架未涵蓋的其他元數據來豐富您的課程時,您可能會考慮創建自己的注釋。 雖然,許多聰明的人都涵蓋了注釋的常見用法,但這並不妨礙您在未來提出自己的用法,因此需要您自己的自定義注釋和處理。

有關StackOverflow的一些相關討論,例如這里

簡單地說:每當你實現自己的框架時 - 以某種方式 - 將代碼“粘合”在一起,就可以在構建(或運行)時間處理的某種“元”信息中豐富代碼。

一些眾所周知的例子包括:依賴注入,對象關系映射,反射,文檔等。

有很多原因,但它們顯然是特定於應用程序的。

例如,我們注釋域類是內部安全框架感知的。 我們處理我們自己的注釋以用於文檔目的。 我們有狀態機注釋,可以為配置和文檔目的構建有向圖。

有些是在運行時詢問,有些是在文檔處理期間,有些是在啟動時,有些是有多種用途。

框架注釋開始是自定義的東西,然后當它變成框架並發布時,它們看起來“顯而易見”和“內置”,但它們並不一定總是有意。

恕我直言,他們是你可以在Java中使用的最好的東西之一,他們節省了我的年齡。 我舉個例子:幾天前我正在編寫一個圖像處理應用程序。 所有過濾器都擴展了一個名為Filter的基類,其中許多都具有對比度,亮度等屬性......現在每個屬性都有一個默認值,一個帶有min和max的范圍,一個適合gui的名稱。 然后有過濾器的屬性,我希望GUI通過控件公開,其他我沒有。 所以我創建了你將使用的@FilterPropertyAnnotation:

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

然后,使用反射,每次用戶在GUI中選擇一個過濾器時,它將掃描過濾子類的方法,查看哪些具有注釋,並僅顯示我用注釋標記的屬性的相應控件,所有這些都與正確的默認值和比例。 我想不出更簡單或更快的方式來做這樣的事情。

注釋對我來說是Java中最好的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM