2011-09-26 17 views
3

我是比較新的Java EE開發,雖然我明白了什麼註解,以及如何使用它們,我有困難「通過樹木看到森林」當談到瞭解爲什麼任何人需要編寫和處理自己的註釋。Java註解的處理器:使用與應用

在什麼情況下,你甚至需要定製的註解?

我敢肯定,他們是至關重要的莫名其妙,我只是不明白出於某種原因其效用。

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

回答

3

有很多用途定製的註解。你可能會認爲很難找到我們爲什麼要創建一個的原因,因爲很多已經在其他框架中定義了。爲了基本回答你自己的問題,你應該問「如果這些框架不存在,發生了什麼事,我是否需要創建自定義的註釋使用?」可能的答案是肯定的。下面是一些例子:

  • 如果JAX-RS不存在,你可能會想如何使用註釋表示該方法的REST操作,如描述here
  • 如果JUnit的不是招了一個「T實現註釋表示類似的測試方法this article,如果春天沒有實施驗證,你可能會認爲做同樣的事情
  • ,它的東西,你可能會想出以及如一個here
  • 而如果Java本身還沒有提供文檔的註釋,那麼您可以參考robably會使用自己定製的註釋說明here

要回答你的問題,每次你想通過尚未涵蓋其他框架,你可能會想創建自己的註解額外的元數據來豐富你的類。雖然很多聰明人都會使用註釋的常見用法,但這並不妨礙您在將來提出自己的用法,因此需要您自己的自定義註釋和處理。

+0

真棒回答!謝謝@momo – IAmYourFaja

0

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

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

一些在運行時被審問,一些文件處理過程中,一些在啓動時,一些有多種用途。

框架註釋開始爲一些自定義的,那麼當它變成一個框架和釋放,他們似乎只是「明顯」和「內置」,但他們並不一定總是意圖。

+0

感謝您的答案@Dave。一個快速的後續問題:那麼可以肯定地說,主要使用註釋是爲了讓其他罐子/依賴關係可以檢索關於註釋代碼的特定於上下文的元數據? – IAmYourFaja

+0

那麼......這就是所有的註釋,提供特定於上下文的元數據,對吧?這只是他們提供給它的內容的問題:應用程序內部,應用程序服務器,ORM等。 –

1

有StackOverflow上一些相關的討論,例如here。簡單地說:只要你實現你自己的框架 - 以某種方式或者其他方式 - 將代碼「粘合」在一起,用你在構建(或運行)時處理的某種「元」信息豐富代碼,時間不多

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

+1

好的答案。我只是覺得很好添加一些例子:Spring,Hibernate ... –

0

恕我直言,他們是你可以在Java中使用的最好的東西之一,他們可以節省我的時間。我會舉一個例子:幾天前我正在編寫一個圖像處理應用程序。所有過濾器都擴展了一個名爲Filter的基類,並且其中許多基類具有對比度,亮度等屬性...現在,每個屬性都將有一個默認值,一個帶有最小值和最大值的範圍,一個適用於gui的名稱。然後,我希望GUI通過控件暴露過濾器的屬性,而其他的我沒有。所以,我創建了你會使用這樣的@FilterPropertyAnnotation:

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

然後,使用反射,每當用戶選擇在GUI中的過濾器會掃描該篩選方法的子類,看看哪些有註釋和僅爲使用註釋標記的屬性顯示適當的控件,所有這些控件都具有正確的默認值和比例。我想不出一個更簡單或更快的方式來做這樣的事情。

註解對我來說是Java中最好的東西。

相關問題