註解與反射
註解概述
- Annotation註解,也叫後設資料。
- 作用:編寫文件、程式碼分析、編譯檢查。現在開發中,用註解替換xml配置檔案。
- 格式:“@註釋名”,還可以新增一些引數值。通過反射機制程式設計實現對這些後設資料的訪問。
基本內建註解
- @Override:需要重寫
- @Deprecated:不建議使用
- @SuppresWarnings:有引數,去掉程式中的警告
註解宣告、本質和成員
- 宣告註解
public @interface MyAnnotation{ } - 註解的本質就是一個interface。
註解屬性型別
- 基本資料型別(四類八種)
- String型別
- 列舉型別(enmu)
- 註解型別
- Class型別
- 以上型別的一維陣列型別
註解屬性的使用
- 如果一個註解有屬性,那麼在使用註解時,要對屬性進行賦值操作。
- 如果一個註解的屬性有多個,都需要賦值。
- 可以給屬性賦預設值(註解處用default)。
- 如果屬性是陣列型別:①可以直接使用 屬性名={ };②陣列值只有一個時可以省略“{}”。
- 對於屬性名稱value的操作:
元註解
用於修飾註解的註解,用於描述註解在什麼範圍及什麼階段使用。
四個元註解介紹:
- @Retention:指定註解資訊在哪個階段存在。
- SOURCE:編譯階段;
- CLASS:解析執行階段;
- RUNTIME:在JVM中。
- @Target:標註註解的執行位置(ElementType.XXX)。
- @Document:生成註解資訊到javadoc文件中。
- @InHerited:讓註解有自動繼承性。
- @Retention的值應該是RUNTIME,因為會結合反射技術來使用;@Target一般使用TYPE或METHOD。
反射介紹
反射,一種計算機處理方式,對於任一物件,都能動態獲取資訊以及動態呼叫物件方法功能。
反射的優缺點:
- 優點:
- 提高了程式的靈活性和擴充套件性;
- 降低耦合性,提高自適應能力;
- 允許程式建立和控制任何類的物件,無需提前硬編碼目標類。
- 缺點:
- 效能問題:反射機制應用在對靈活性和擴充性要求很高的系統框架上,普通程式不建議使用。
- 反射會模糊程式內部邏輯,帶來維護問題。
反射的API
- Class介紹及獲取
java中的Class可以代表任意的類或者介面型別。
如何獲取一個Class?- 如果有一個物件,可以直接通過從Object類中繼承的getClass方法獲取;
- 可以通過類包(介面)直接呼叫其屬性.class獲取;
- (推薦,無耦合)Class.forName()
為什麼要獲得Class?
反射操作中會獲取類的成員,Constructor、Filed、Method,需要通過Class來獲得其他物件。
- Constructor
單個構造器,得到它就可以例項化物件。- getConstructor獲取類的public構造;
- getConstructors獲取類的所有public構造;
- getDeclaredConstructor獲取類的private構造;
- getDeclaredConstructors獲取類的所有private構造。
- Filed
如何獲取Filed?- getFiled獲取類的public屬性;
- getFileds獲取類的所有public屬性;
- getDeclaredFiled獲取類的private屬性;
- getDeclaredFileds獲取類的所有private屬性。
賦值、取值操作
- Method
如何獲取一個Mehod物件?-
getMethod獲取類的方法,包括父類的;
-
getMethods獲取類的所有方法,包括父類的;
-
getDeclaredMethod獲取僅本類的方法;
-
getDeclaredMethods獲取僅本類的所有方法。
-
執行方法,invoke
-
Method的invoke使用注意事項
-
呼叫static方法
- 方法是靜態的,invoke呼叫時不需要傳遞物件。
- 方法是靜態的,invoke呼叫時不需要傳遞物件。
-
呼叫引數是陣列型別的方法
-
反射賦值案例
代理
newProxyInstance描述
invocationHandler詳解
- 是一個介面,介面中宣告瞭一個invoke()(與反射不同)方法,它是在代理物件呼叫行為時會執行的方法,invoke方法有三個引數:
動態代理在開發中可以完成效能監控、許可權控制、日誌記錄等操作。
建立物件的4種方式
- new關鍵字
- clone()方法
- 反序列化:objectInputStream.readObject()
- 反射:Class.newInstence()
相關文章
- Java反射與註解Java反射
- Java之註解與反射Java反射
- Java註解與反射機制Java反射
- Java註解與反射的使用Java反射
- 註解 & 反射反射
- Java反射-註解Java反射
- 註解和反射反射
- 【進階】Spring中的註解與反射Spring反射
- Java註解與反射學習筆記Java反射筆記
- Java註解和反射Java反射
- Java 註解和反射Java反射
- JAVA-註解(2)-自定義註解及反射註解Java反射
- 03-Java核心類庫_列舉、註解與反射Java反射
- 小白都能學會的Java註解與反射機制Java反射
- Java ”框架 = 註解 + 反射 + 設計模式“ 之 註解詳解Java框架反射設計模式
- Java反射和註解基本用法Java反射
- 註解和反射Day02反射
- java註解與反射(非常詳細, 帶有很多樣例)Java反射
- 自定義註解以及註解在反射中的應用反射
- Java列舉類、註解和反射Java反射
- 註解和反射學習筆記反射筆記
- 自定義註解+反射 實現給註解新增功能的效果反射
- Java反射動態修改註解的值Java反射
- 好程式設計師Java培訓分享註解與反射原理說明程式設計師Java反射
- Environment Switcher 原理解析(註解、Apt、反射、混淆)APT反射
- 8.集合、泛型、列舉、註解、反射泛型反射
- 暑期自學 Day 08 | Junit,反射,註解(二)反射
- 暑期自學 Day 07 | Junit,反射,註解(一)反射
- 反射,註解,動態代理,依賴注入控制反轉反射依賴注入
- Java基礎加強筆記——測試、反射、註解Java筆記反射
- 死磕java底層(三)—反射、動態代理和註解Java反射
- 關於Java中泛型、反射和註解的掃盲篇Java泛型反射
- 利用註解+反射消除重複程式碼,你學會了嗎?反射
- 簡單介紹如何通過註解獲取反射的值反射
- 註解與抽取基類
- Java註解與原理分析Java
- @Import與@ImportResource註解的解讀Import
- 總結一下公共欄位(aop加自定義註解加反射)反射