Java注解之自定義注解實現


我們在實際開發的時候,會使用到很多的注解,特別是使用Spring或者Spring家族時,會大量的使用注解,那我們有沒有想過Spring的這些注解都是怎么實現的呢?為什么加了這些注解就會有對應的效果呢?以及如果我們自己要實現注解?步驟和方法有哪些呢?

1.注解是什么? 注解(Annotation)也叫元數據,用於對代碼進行說明,可以對包、類、接口、字段、方法參數、局部變量等進行注解。其實說白就是代碼里的特殊標志,這些標志可以在編譯,類加載,運行時被讀取,並根據這些信息執行相應的處理,以便於其他工具補充信息或者進行部署。

元數據(Metadata),又稱中介數據、中繼數據,為描述數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件記錄等功能。

如果說注釋是寫給人看的,那么注解就是寫給程序看的。它更像一個標簽,貼在一個類、一個方法或者字段上。它的目的是為當前讀取該注解的程序提供判斷依據。比如程序只要讀到加了@Test的方法,就知道該方法是待測試方法,又比如@Before注解,程序看到這個注解,就知道該方法要放在@Test方法之前執行。

1.1 注解的類型 一般常用的注解可以分為三類:

  1. 元注解,元注解是用於定義注解的注解,包括@Retention(標明注解被保留的階段)、@Target(標明注解使用的范圍)、@Inherited(標明注解可繼承)、@Documented(標明是否生成javadoc文檔)。

  2. Java自帶的標准注解,包括@Override(標明重寫某個方法)、@Deprecated(標明某個類或方法過時)和@SuppressWarnings(標明要忽略的警告),使用這些注解后編譯器就會進行檢查。

  3. 自定義注解,可以根據自己的需求定義注解。

1.2.注解配置和xml配置的關系 我們知道Spring早期是使用xml來進行配置的,現在更推薦注解配置,那么xml配置和注解配置的區別是什么呢?

我們可以認為xml和注解都是元數據。

xml: 是一種集中式的元數據,與源代碼無綁定。

注解:是一種分散式的元數據,與源代碼緊綁定。

1.3 注解的作用 生成文檔,通過代碼里標識的元數據生成javadoc文檔。

編譯檢查,通過代碼里標識的元數據讓編譯器在編譯期間進行檢查驗證。

編譯時動態處理,編譯時通過代碼里標識的元數據動態處理,例如動態生成代碼。

運行時動態處理,運行時通過代碼里標識的元數據動態處理,例如使用反射注入實例。

2.注解實現 2.1 實現注解的步驟 (1).聲明注解

(2).添加注解

(3). 獲取添加了注解的目標。通常是Class對象,Method對象,Field對象,還有Constructor對象,Parameter對象,Annotation對象等

a.通過已知對象,獲取Class對象

b.通過全類路徑,獲取Class對象

c.掃描包路徑,獲取Class對象

(4).實現注解處理器。借助反射,獲取注解對象,讀取注解屬性值, 然后根據注解及屬性值做相應處理




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM