什麼是反射?反射機制的應用場景有哪些?
阿新 • • 發佈:2019-01-09
java反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。
靜態編譯:在編譯時確定型別,繫結物件。
動態編譯:在執行時確定型別,繫結物件。
反射機制的優缺點:
優點:執行期型別的判斷,動態載入類,提高程式碼靈活度。
缺點:效能瓶頸:反射相當於一系列解釋操作,通知 JVM 要做的事情,效能比直接的java程式碼要慢很多。
反射的應用場景
反射是框架設計的靈魂。
在我們平時的專案開發過程中,基本上很少會直接使用到反射機制,但這不能說明反射機制沒有用,實際上有很多設計、開發都與反射機制有關,例如模組化的開發,通過反射去呼叫對應的位元組碼;動態代理設計模式也採用了反射機制,還有我們日常使用的 Spring/Hibernate 等框架也大量使用到了反射機制。
舉例:①我們在使用JDBC連線資料庫時使用Class.forName()通過反射載入資料庫的驅動程式;②Spring框架也用到很多反射機制,最經典的就是xml的配置模式。Spring 通過 XML 配置模式裝載 Bean 的過程:1) 將程式內所有 XML 或 Properties 配置檔案載入入記憶體中; 2)Java類裡面解析xml或properties裡面的內容,得到對應實體類的位元組碼字串以及相關的屬性資訊; 3)使用反射機制,根據這個字串獲得某個類的Class例項; 4)動態配置例項的屬性。