精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 反射:讓你更優雅的使用框架!

開發
毫不夸張地說,沒有反射,很多優秀的框架不復存在,沒有這些優秀的框架(比如Spring),Java可能會遜色很多,因此,這篇文章,我們一起來深入探討Java反射以及其背后的原理。

在 Java語言中,反射是一種強大而優秀的機制,通過反射,我們可以在運行時檢查和修改類、接口、字段和方法的信息,甚至動態地創建對象、調用方法和訪問私有成員。

可以毫不夸張地說,沒有反射,很多優秀的框架不復存在,沒有這些優秀的框架(比如Spring),Java可能會遜色很多,因此,這篇文章,我們一起來深入探討Java反射以及其背后的原理。

一、什么是反射

先看看 Oracle官方對java反射的說明:

Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.

Java 的反射機制是指在運行狀態中,對于任意一個類都能夠知道這個類所有的屬性和方法;并且對于任意一個對象,都能夠調用它的任意一個方法;這種動態獲取信息以及動態調用對象方法的功能成為Java語言的反射機制。

它是通過 Java反射 API 來實現,其中最核心的類位于 java.lang.reflect 包下,如 Class、Constructor、Field 和 Method等,這些類提供了對類和對象的運行時信息進行檢查和操作的方法。如下圖,展示了 JDK源碼中 java.lang.reflect 包所有的類:

二、反射的原理

反射的原理主要可以從下面 4個點來闡述:

  • 類加載:當 Java程序運行時,類加載器會根據類的名稱查找并加載類的字節碼文件,然后將字節碼文件轉換為可執行的 Java類,并將其存儲在運行時數據區域的方法區中。
  • 創建 Class對象:在類加載過程中,Java虛擬機會自動創建對應的Class對象,Class對象包含了類的元數據信息,并提供了訪問和操作類的接口。
  • 獲取 Class對象:Class對象通過多種方式獲取,最常見的方式有 3種: 類的 .class屬性、類實例的 getClass()方法、Class.forName()。
  • 訪問和操作:通過Class對象獲取類的字段、方法、構造函數等信息,使用Field類和Method類來訪問和操作字段和方法,甚至可以調用私有的字段和方法。

通過上述的分析可以看出:反射機制需要基于Java虛擬機對類的加載、存儲和訪問機制的支持,通過反射,可以在運行時動態地探索和操作類的信息,實現靈活的編程和代碼的動態行為。

三、如何使用反射

在講解了 Java反射原理之后,我們通過一個真實的例子來展示如何使用 Java反射機制。如下示例 demo,通過反射給 Person 類中的 greet() 方法傳入一個 name,然后輸出:

過程分析:

  • 首先,在示例代碼通過獲Person.class取了 Person的Class對象;
  • 然后,使用clazz.getName()獲取了類的名稱,通過clazz.getModifiers()獲取了類的修飾符,并打印輸出;
  • 接下來,通過clazz.getDeclaredMethods()獲取類的所有方法,并依次打印輸出方法的名稱;
  • 接著,通過clazz.getDeclaredConstructor().newInstance()方法創建了 Person 的實例;
  • 再接著,使用clazz.getDeclaredMethod()方法獲取了 greet()方法的引用。為了調用私有方法,我們需要調用setAccessible(true)來設置方法的可訪問性。
  • 最后,使用Method.invoke()方法調用了 greet()方法,傳遞參數name = Java。

運行示例結果如下圖:

上述示例,我們通過詳細的步驟展示了如何使用反射獲取類的信息和動態調用方法。你也可以嘗試在 Person 中添加更多的方法和字段,并使用反射來獲取和操作它們。

四、部分源碼解讀

在上述示例講解時,最后是調用 Method.invoke() 實現 Person.greet()的調用,因此,這里我們主要分析 invoke()方案,官方源碼截圖:

從上面源碼截圖看出:Method.invoke() 方法,真實返回的是接口 MethodAccessor.invoke()方法。MethodAccessor 接口有三個實現類,具體是調用哪個類的 invoke 方法?

進入acquireMethodAccessor方法,可以看到MethodAccessor由ReflectionFactory 的 newMethodAccessor方法決定。

再進入 DelegatingMethodAccessorImpl 的 invoke方法:

DelegatingMethodAccessorImpl的invoke方法返回的是MethodAccessorImpl的invoke方法,而MethodAccessorImpl的invoke方法,由它的子類NativeMethodAccessorImpl重寫,這時候返回的是native invoke0,如下圖:

跟到源碼最后可以發現:Method.invoke()方法最終調用 native的invoke0(),應用層面的操作最終轉換成對操作系統 c/c++方法的調用。

五、反射優缺點

上面內容的講解已經側面反映出了Java反射的一些優點,這里再詳細的總結下反射的優缺點:

優點:

  • 動態性:反射允許我們在運行時動態地獲取和操作類的信息,而不需要在編譯時確定。這為編寫靈活的、可擴展的代碼提供了便利。
  • 靈活性:通過反射,我們可以繞過訪問修飾符的限制,訪問和修改私有成員、調用私有方法等。這為我們在特殊情況下進行一些高級操作提供了可能。
  • 框架開發:反射在開發框架和庫時非常有用。通過反射,框架可以動態地加載和實例化類,解析注解,處理回調等。這為框架提供了更大的靈活性和可擴展性。
  • 調試和探索:反射使得我們可以在運行時探索代碼背后的信息,例如獲取類的結構、方法、字段等。這對于調試和理解復雜的代碼非常有幫助。

缺點:

  • 性能開銷:相比于直接調用代碼,使用反射會帶來更高的性能開銷。反射涉及到動態查找、方法調用等操作,這些操作比直接調用代碼更加耗時。因此,在對性能要求較高的場景下,過度使用反射可能導致性能下降。
  • 安全性和穩定性:反射打破了封裝性和類型安全性,通過反射,我們可以繞過訪問修飾符的限制,調用私有方法等,這可能導致代碼的不穩定性和安全隱患。因此,使用反射時需要格外小心,確保代碼的正確性和穩定性。

從整體上看,Java反射是以犧牲了小部分的性能換取了更好的擴展性和靈活性,犧牲小我成就大我,而且,隨著現代硬件設備能力越來越強,這點小性能的犧牲是完全值得的。

六、為什么需要反射 

反射機制在 Java中的作用不言而喻,下面列舉了反射機制的一些常見場景和原因:

  • 運行時類型檢查:反射機制允許在運行時獲取類的信息,包括字段、方法和構造方法等。因此,在進行運行時類型檢查,以確保代碼在處理不同類型的對象時能夠正確地進行操作。
  • 動態創建對象:通過反射,可以在運行時動態地創建對象,而不需要在編譯時知道具體的類名。這對于某些需要根據條件或配置來創建對象的情況非常有用,例如工廠模式或依賴注入框架。
  • 訪問和修改私有成員:反射機制可以繞過訪問權限限制,訪問和修改類的私有字段和方法。雖然這破壞了封裝性原則,但在某些特定情況下,這種能力可以幫助我們進行一些特殊操作,例如單元測試、調試或框架的內部實現。
  • 動態調用方法:反射機制允許我們在運行時動態地調用類的方法,甚至可以根據運行時的條件來選擇不同的方法。這對于實現插件化系統、處理回調函數或實現動態代理等功能非常有用。
  • 框架和庫的實現:許多Java框架和庫在其實現中廣泛使用了反射機制。它們利用反射來自動發現和加載類、實現依賴注入、處理注解、配置文件解析和動態代理等。反射機制使得這些框架和庫更加靈活和擴展。

七、常用框架 

很多優秀的框架內部都使用了Java反射,這里重點講解下給 Java打下半壁江山的 Spring生態(Spring Framework,Spring MVC,SpringBoot, SpringCloud...),以 Spring Framework為例:

  • 依賴注入(Dependency Injection) : 依賴注入,可以把程序員主動創建對象的事情交給 Spring管理,大大提升了對象創建的靈活性。當我們在配置文件或用注解定義 Bean時,Spring會使用反射來動態地實例化對象,并將依賴的其他對象注入到這些實例中。
  • 自動裝配(Autowired) : 當 Spring容器啟動時,它會掃描應用程序中的所有類,并使用反射來查找和識別帶有 @Autowired注解的字段、方法或構造函數。再自動將 Bean注入到需要的位置,實現對象之間的自動連接。
  • AOP(Aspect-Oriented Programming) : AOP 利用了動態代理和反射機制。通過定義切面(Aspect)和切點(Pointcut),Spring可以在運行時使用反射來創建代理對象,從而實現橫切關注點(cross-cutting concerns)的功能,如日志記錄、事務管理等。
  • 動態代理(Dynamic Proxy) : Spring利用 Java反射機制動態地創建代理對象,并在代理對象中添加額外的邏輯,從而實現對目標對象的增強。
  • 框架擴展和定制: Spring通過反射機制來實現對應用程序的擴展和定制的。例如,Spring提供了BeanPostProcessor接口,允許開發人員在 Bean初始化前后插入自定義邏輯,這是通過反射來實現的。

另外,還有一些耳熟能詳的框架也使用了Java反射:

  • JUnit:JUnit是一個優秀的單元測試框架,它利用了 Java反射機制動態地加載和執行測試方法。
  • Jackson:Jackson是一個 JSON處理的 Java庫,它利用反射來實現 JSON與 Java對象之間的轉換,動態讀取和寫入 Java對象的屬性,并將其轉換為 JSON格式。
  • Hibernate ORM:Hibernate和 MyBatis一樣,都是對象關系映射框架,通過反射來實現對象與數據庫表之間的映射關系。

八、總結 

本文講解了Java反射的原理和使用方式,因為有了Java反射,很多優秀的框架應運而生,從而使得 Java 生態越來越完善,因此,反射是絕大多數框架的基石。

Java反射有優點也有缺點,從整體上看,Java反射是以犧牲了小部分的性能換取了更好的擴展性和靈活性,犧牲小我成就大我,而且,隨著現代硬件設備能力越來越強,這點小性能的犧牲是完全值得的。

掌握Java反射,我們可以更好的理解一些優秀框架的運行機制,比如:Spring。它可以幫助我們更好的使用框架,遇到問題時也能更好的去分析和解決。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2020-04-03 14:55:39

Python 代碼編程

2022-03-08 06:41:35

css代碼

2019-09-29 16:17:25

Java代碼性能編程語言

2022-04-10 10:41:17

ESLint異步代碼

2023-11-23 13:50:00

Python代碼

2022-11-18 08:32:23

spring參數解析器

2018-07-12 14:20:33

SQLSQL查詢編寫

2022-12-26 07:47:37

JDK8函數式接口

2023-07-10 09:39:02

lambdaPython語言

2025-02-10 00:25:00

命令模式擴展機制系統

2025-04-21 17:55:25

2025-05-29 08:35:39

Python代碼開發

2017-09-27 16:09:29

代碼

2024-12-31 08:54:38

2022-05-13 08:48:50

React組件TypeScrip

2023-12-21 10:26:30

??Prettier

2025-07-24 06:49:51

2024-08-20 14:25:20

2024-07-30 14:09:19

裝飾器Python代碼

2024-07-03 08:13:56

規則執行器代碼
點贊
收藏

51CTO技術棧公眾號

三大队在线观看| 在线观看精品视频| 午夜一级黄色片| 日韩.com| 精品免费视频.| 青青草原av在线播放| bbbbbbbbbbb在线视频| 精品一区二区三区欧美| 国内精久久久久久久久久人| 精品人伦一区二区三电影 | 中文字幕字幕中文在线中不卡视频| 51国偷自产一区二区三区| 久久艹免费视频| 一本精品一区二区三区| 亚洲美女在线视频| 在线观看欧美一区二区| 一区二区视频免费完整版观看| 亚洲精品综合在线| 欧美精品久久久| 午夜精品小视频| 蜜桃一区二区三区在线| 午夜精品一区二区三区在线视频| 99久久久无码国产精品不卡| 久久悠悠精品综合网| 6080午夜不卡| 久久精品视频91| 狂野欧美激情性xxxx欧美| 国产日韩欧美a| 精品乱子伦一区二区三区| 国产精选久久久| 日韩国产精品久久| 2021国产精品视频| 久久免费少妇高潮99精品| 日本久久精品| 亚洲视频在线免费观看| 国产精品入口麻豆| 秋霞一区二区三区| 51精品国自产在线| 性生活免费在线观看| 欧美aa视频| 午夜久久久影院| www婷婷av久久久影片| av大片在线播放| 久久精品视频网| 欧美精品欧美精品| 视频二区在线| 久久综合色婷婷| 鲁片一区二区三区| 污污网站在线免费观看| 99久久99久久免费精品蜜臀| 成人高清在线观看| www.xxxx国产| 国产91精品在线观看| 3d动漫精品啪啪一区二区三区免费| 一二三四区视频| 免费看日韩精品| 国产精品一二三视频| 真实的国产乱xxxx在线91| 肉肉av福利一精品导航| 国产999精品视频| 波多野结衣一区二区三区在线| 久久久国产亚洲精品| 日韩美女主播视频| 国产免费一区二区三区四区五区| 性高湖久久久久久久久| 日本成人在线视频网址| 色屁屁影院www国产高清麻豆| 性伦欧美刺激片在线观看| 国产成人在线一区二区| 少妇无套内谢久久久久| 美女视频网站黄色亚洲| 91美女片黄在线观| 草逼视频免费看| 成人精品一区二区三区四区 | 99热这里只有精品66| 国产麻豆91精品| 国产精品乱码| 免费资源在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 中文一区二区视频| 欧美老熟妇一区二区三区| 亚洲婷婷在线| 国产99久久精品一区二区永久免费 | 性活交片大全免费看| 中文字幕一区二区三区四区久久| 精品国产91洋老外米糕| 爱爱免费小视频| 色天天综合网| 性色av一区二区三区免费| 成人毛片在线播放| 美国三级日本三级久久99 | 午夜dv内射一区二区| 久久国内精品| 精品国产乱码久久久久久1区2区 | 男人午夜视频在线观看| www.丝袜精品| 一本色道久久综合狠狠躁篇怎么玩 | 国产xxxx在线观看| 91视频91自| 色香蕉在线观看| 涩涩视频网站在线观看| 欧美日本韩国一区二区三区视频| 成熟妇人a片免费看网站| 精品高清在线| 韩剧1988在线观看免费完整版| 国产一级精品毛片| 成人av在线一区二区三区| 日本一区高清在线视频| 岛国毛片av在线| 欧美三片在线视频观看| chinese麻豆新拍video| 911精品美国片911久久久| 欧美亚洲视频一区二区| 国产裸体永久免费无遮挡| 91一区一区三区| 国产人妻互换一区二区| 青青热久免费精品视频在线18| 精品国产成人在线影院| 国产探花在线视频| 久久亚洲综合| 国产一区二区黄色| 超碰在线免费公开| 欧美影片第一页| 久久精品女同亚洲女同13| 自由日本语亚洲人高潮| 国产精品高潮呻吟久久av黑人| 十八禁一区二区三区| 亚洲男人的天堂一区二区| 激情五月婷婷久久| 性欧美lx╳lx╳| 久久久亚洲成人| 国产丰满美女做爰| 亚洲欧美日韩国产综合| 亚洲xxxx2d动漫1| 国产成人影院| 5278欧美一区二区三区| 欧美一级性视频| 一区二区三区国产| 特种兵之深入敌后| 综合久久十次| 91精品黄色| 综合图区亚洲| 欧美一区二区免费视频| 成人免费视频国产免费观看| 精品系列免费在线观看| 亚洲一卡二卡三卡| 91精品店在线| 深夜精品寂寞黄网站在线观看| 波多野结衣黄色| 欧美激情在线看| 超碰在线人人爱| 日韩一区电影| 成人免费淫片aa视频免费| 婷婷五月在线视频| 欧美年轻男男videosbes| 久久久久久成人网| 老司机精品视频导航| 亚洲一区3d动漫同人无遮挡 | 天堂网av2018| 激情综合网av| 99久热在线精品视频| 凹凸av导航大全精品| 久久久伊人欧美| 天堂在线观看视频| 色菇凉天天综合网| 99热6这里只有精品| 国产一区在线看| 欧美在线观看黄| 美女av一区| 日韩av大片免费看| 五月香视频在线观看| 欧美一区日韩一区| 久久精品国产亚洲av高清色欲| 99九九99九九九视频精品| 久久无码高潮喷水| 精品精品久久| 亚洲最大的网站| 黑森林国产精品av| 国产一区二区三区免费视频| 国产又粗又猛又黄| 一区二区三区四区中文字幕| 精品熟女一区二区三区| 欧美一级网站| 一级黄色免费在线观看| 伦理一区二区| 国产欧美一区二区三区久久人妖| 性欧美ⅴideo另类hd| 日韩av中文字幕在线播放| 免费无码国产精品| 亚洲夂夂婷婷色拍ww47 | 国产精品久久久久久久久免费丝袜 | av免费在线一区| 欧美黑人狂野猛交老妇| 欧美日韩激情视频一区二区三区| 欧美精品日韩一本| 国产成人无码一区二区三区在线| 国产精品午夜在线观看| 国产视频精品视频| 日本午夜精品视频在线观看| 999一区二区三区| 欧美色婷婷久久99精品红桃| 成人免费91在线看| 欧美jizz18| 5278欧美一区二区三区| 婷婷色在线资源| 国产亚洲欧美日韩美女| 亚洲黄色精品视频| 欧美日韩情趣电影| 999这里只有精品| 亚洲精品国产成人久久av盗摄| 小早川怜子久久精品中文字幕| 国产精品自拍一区| 蜜桃免费在线视频| 妖精视频成人观看www| 中国人体摄影一区二区三区| 婷婷综合福利| 成人免费在线看片| 91成人小视频| 国产精品电影网| 老牛影视精品| 久久久久久久久电影| 日韩在线观看www| 亚洲少妇中文在线| 三级在线播放| 亚洲国产精品va在线看黑人动漫 | 久久国产精品波多野结衣| 亚洲国产精品二十页| 中国美女乱淫免费看视频| 成人妖精视频yjsp地址| 天天爽夜夜爽视频| 国内成+人亚洲+欧美+综合在线| 午夜视频在线瓜伦| 亚洲在线播放| 免费看国产曰批40分钟| 黑丝一区二区三区| 秋霞在线一区二区| 97视频热人人精品免费| 四虎影院一区二区三区 | 国产青青在线视频| 欧美天天视频| 国产成人在线小视频| 欧美日韩四区| 97久久国产亚洲精品超碰热| 一区二区三区网站| xxxxxx在线观看| 欧美.www| 激情视频小说图片| 欧美在线免费| 久艹在线免费观看| 在线电影一区| 欧美 国产 日本| 久久综合亚州| 美女在线视频一区二区| 久久国产福利国产秒拍| 毛片毛片毛片毛| 国产乱一区二区| 少妇献身老头系列| 成人av动漫在线| 私密视频在线观看| 91蝌蚪porny| 日本二区在线观看| 国产精品美女久久久久久久网站| 手机在线中文字幕| 一区二区三区在线看| 国产无精乱码一区二区三区| 亚洲成av人片一区二区三区| 好看的av在线| 欧美探花视频资源| japanese国产| 亚洲精品aⅴ中文字幕乱码| 黄色毛片在线观看| xvideos国产精品| 综合久久2o19| 欧美在线一级视频| 国产福利亚洲| 高清av免费一区中文字幕| 欧美大胆视频| 亚洲不卡中文字幕| 欧美日韩91| 哪个网站能看毛片| 久久99国产精品久久| 欧美熟妇精品一区二区| 91视频国产资源| frxxee中国xxx麻豆hd| 亚洲午夜日本在线观看| 免费黄色小视频在线观看| 欧美精品久久天天躁| 黄色av中文字幕| 在线观看日韩www视频免费| 伊人影院在线视频| 欧美专区日韩视频| 国产精品毛片aⅴ一区二区三区| 国产精品.com| 日韩精品影视| 国产91在线免费| 久久机这里只有精品| 手机免费看av片| 国产精品免费久久久久| 亚洲免费在线观看av| 91精品国产综合久久久久久久久久| 天堂在线视频免费| 日韩一区二区精品视频| 亚洲美女炮图| 91丨九色丨国产| 日本不卡高清| 六月丁香婷婷激情| 国产成人精品免费一区二区| 欧洲美一区二区三区亚洲| 亚洲国产你懂的| 国产又黄又大又粗的视频| 亚洲美女喷白浆| av午夜在线观看| 成人啪啪免费看| 欧美日韩国产免费观看视频| 免费在线观看视频a| 久久国产精品免费| 亚洲成人黄色av| 姬川优奈aav一区二区| 国产富婆一级全黄大片| 在线视频日本亚洲性| 少妇视频在线观看| 国产精品亚洲综合| 自拍偷拍欧美| 午夜福利123| 中文字幕在线观看不卡| 在线免费一区二区| 亚洲无限av看| 吉吉日韩欧美| 另类欧美小说| 国产欧美日韩综合一区在线播放| 亚洲午夜精品在线观看| 亚洲视频在线一区观看| 亚洲在线免费观看视频| 一区二区av在线| 性欧美18一19sex性欧美| 麻豆亚洲一区| 久久电影一区| 无码熟妇人妻av| 欧美日韩色婷婷| 视频二区在线| 日本不卡免费高清视频| 狠狠综合久久av一区二区蜜桃| 亚洲色成人一区二区三区小说| av资源网一区| 黄网在线观看视频| 亚洲另类激情图| 日韩三区在线| 亚洲一区综合| 激情久久五月天| 国产精品成人免费观看| 欧美一级xxx| 欧美人体视频xxxxx| 国产69精品久久久久9999apgf | 国产主播中文字幕| 国产欧美日本一区二区三区| 少妇一级淫片日本| 色av吧综合网| 麻豆精品在线| 青春草国产视频| 91在线视频官网| 亚洲天堂五月天| www亚洲精品| 99ri日韩精品视频| 欧美在线观看www| 国产午夜精品美女毛片视频| 在线观看国产小视频| 久久视频中文字幕| 57pao国产一区二区| 国产精品12345| 久久久99久久精品欧美| 亚洲一区二区色| 久久夜色精品亚洲噜噜国产mv| 日韩三级久久| 男人天堂999| 一区免费观看视频| 日韩中文字幕综合| 日韩免费不卡av| 牛牛国产精品| 中文精品在线观看| 欧美另类高清zo欧美| 91九色在线看| 亚洲v欧美v另类v综合v日韩v| 国产一区二区伦理| 日韩 欧美 综合| 日韩在线视频免费观看| 国产精品22p| 亚洲免费看av| 亚洲国产精品视频| 91视频在线观看| 国内成+人亚洲| 久久国产三级精品| 日韩手机在线观看| 最好看的2019年中文视频 | 色姑娘综合网| 丁香六月久久综合狠狠色| 综合久久中文字幕| 久久久久久亚洲| 亚州av乱码久久精品蜜桃| 中文字幕在线观看的网站| 678五月天丁香亚洲综合网|