深入理解 Java 註解 [元註解(一)]

寶驢發表於2016-08-03

一、首先,我們來說一下註解是什麼呢?它到底有什麼作用呢?


         JAVA 註解,有很多人把他理解為註釋,解釋。但功能不僅僅是解釋那麼簡單。註解(Annotation)為我們在程式碼中新增資訊提供了一種形式化的方法,是我們可以在稍後 某個時刻方便地使用這些資料(通過 解析註解來使用這些資料)。而且,註解的寫法和註釋的寫法是完全不一樣的,註解是@...,而註釋一般是/*...*/這樣的。例如我們現在經常用的SSM框架,我們在做CRUD操作的時候,我們會在控制層給一個@Controller註解,在業務層給一個@Service註解,在持久層給一個@Repository註解,那麼有了這些個註解,我們就很清楚的知道它就是控制層、業務層、持久層。這就是對註解最基本的理解。

       註解的作用:

       1、生成文件。這是最常見的,也是Java 最早提供的註解。常用的有@see @param @return 等

       2、跟蹤程式碼依賴性,實現替代配置檔案功能。比較常見的是spring 2.5 開始的基於註解配置。作用就是減少配置。現在的框架基本都使用了這種配置來減少配置檔案的數量。以後java的程式開發,最多的也將實現註解配置,具有很大用處;

       3、在編譯時進行格式檢查。如@override 放在方法前,如果你這個方法並不是覆蓋了超類方法,則編譯時就能檢查出。

二、JAVA 元註解

       說到註解,那不得不說的就是元註解了,說到元註解,可能有很多人都對此比較陌生,我們每個程式設計師肯定都知道註解,也用過註解,但是應該很少有人去了解註解。

      要深入學習註解,我們就必須能定義自己的註解,並使用註解,在定義自己的註解之前,我們就必須要了解Java為我們提供的元註解和相關定義註解的語法。

      元註解的作用就是負責註解其他註解。

      Java定義的元註解有四個:

              1.@Target
           2.@Retention
      3.@Documented
      4.@Inherited

         這些型別和它們所支援的類在java.lang.annotation包中可以找到。下面我們看一下每個元註解的作用和相應引數的使用說明。(在這我就只說下前兩個我們一般比較常用的)

                      1.@Target

                       @Target說明了Annotation所修飾的物件範圍:Annotation可被用於 packages、types(類、介面、列舉、Annotation型別)、型別成員(方法、構造方法、成員變數、枚舉值)、方法引數和本地變數(如迴圈變數、catch引數)。在Annotation型別的宣告中使用了target可更加明晰其修飾的目標。

            作用:用於描述註解的使用範圍(即:被描述的註解可以用在什麼地方)

                元註解的取值是用ElementType取的,即ElementType.值

                那麼,ElementType取值有:

               1.CONSTRUCTOR:用於描述構造器
       2.FIELD:用於描述屬性
       3.LOCAL_VARIABLE:用於描述區域性變數
       4.METHOD:用於描述方法
       5.PACKAGE:用於描述包
       6.PARAMETER:用於描述引數
       7.TYPE:用於描述類、介面(包括註解型別)

               下面我主要說下FIELD、METHOD、TYPE這三個經常用到的

                使用例項:

                我們首先來建立一個註解Fruit,顧名思義也就是說水果的意思     

               

                   然後在來建立一個蘋果類Apple,並且把Fruit這個註解分別給Apple裡的類、屬性、方法上邊

                 

                 那我們很明顯可以看到屬性和方法報錯了,那也就是說我們上邊@Target給的值ElementType.TYPE是來描述類的,不能描述屬性以及方法等。如果只給了ElementType.TYPE這一個值那麼就說明Fruit這個註解只能用到類上邊。那如果屬性和方法也想要用這個註解,或者說類、屬性、方法都想用Fruit這個註解應該怎麼辦呢?下面例項說明一下:

                

                 可以看到又在@Target裡邊加了兩個值(ElementType.FIELD、ElementType.METHOD),而且多了一個大括號。

                 我們如果想要將註解用到兩個或兩個以上的時候,就應該把值用大括號給括起來。那我們再看一下Apple類:

                

                很明顯,不報錯了,那麼我們也很容易發現ElementType.TYPE、ElementType.FIELD、ElementType.METHOD它們的作用,TYPE是描述類的,FIELD是描述屬性的,METHOD是描述方法的。

                說到這,我相信朋友們對@Target也瞭解的差不多了,那麼@Target我就說到這裡。

                之後我會持續更出@Retention的相關東西。。。。。

相關文章