精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧洲国产精品| 欧美激情亚洲一区| 国产精品一区二区小说| 黄色免费在线网站| 成人精品国产福利| 国产第一区电影| 日本午夜在线观看| 久久久久久久久久久久久久久久久久久久 | 国产专区欧美专区| 国产精品7777| 日韩免费一区| 亚洲国产欧美一区二区三区同亚洲 | 97超碰免费在线| 国产欧美视频在线观看| 粉嫩精品一区二区三区在线观看| 精品久久久久久久久久久久久久久久| 色综合天天爱| 日韩精品视频观看| 污污视频在线免费| 日韩av电影资源网| 狠狠躁夜夜躁人人爽天天天天97 | 黄色aaa视频| 视频成人永久免费视频| 欧美日韩一区高清| 国产精品一区二区免费在线观看| 国产写真视频在线观看| 国产网红主播福利一区二区| 国产精品久久久久久久久久直播| 69av视频在线观看| 99国产精品视频免费观看一公开| 久久亚洲精品一区| 亚洲一区 欧美| 另类春色校园亚洲| 日韩美女一区二区三区| 日韩大片一区二区| 欧美成人免费电影| 黄色一区二区三区| 亚洲精品蜜桃久久久久久| 欧美精品电影| 国产精品美女久久久久aⅴ| 免费一区二区三区在在线视频| 亚洲av无码乱码在线观看性色| 精品亚洲成a人| 国产精品视频xxxx| 日本黄色中文字幕| 日日摸夜夜添夜夜添亚洲女人| 91精品国产99久久久久久| 久久久久久久久精| 午夜日韩激情| 欧美黄色片视频| 久久久久久欧美精品se一二三四| 五月精品视频| 裸体女人亚洲精品一区| 欧美成人777| 99九九热只有国产精品| 日韩最新中文字幕电影免费看| av永久免费观看| 成人aaaa| 日韩中文字幕国产精品| 欧美爱爱免费视频| 亚洲色图网站| 九色精品免费永久在线| 免费三片在线播放| 亚洲午夜极品| **欧美日韩vr在线| 天天干天天操天天爱| 乱码第一页成人| 国产精品999| 91精东传媒理伦片在线观看| 久久99国产精品麻豆| 国产在线视频2019最新视频| av中文字幕观看| 成人美女在线视频| 久久久久九九九| 搞黄视频在线观看| 日韩美女视频一区二区| www.avtt| 伊人久久综合一区二区| 欧美在线观看视频一区二区| 毛片毛片毛片毛| 在线综合色站| 亚洲男女自偷自拍图片另类| 伊人影院综合网| 91精品1区| 国内精品久久久久久影视8| 日韩在线播放中文字幕| 美女看a上一区| 肥熟一91porny丨九色丨| 天天干天天爱天天操| 中文天堂在线一区| 麻豆一区二区三区在线观看| 超碰高清在线| 欧美日韩亚洲不卡| 午夜视频在线观看国产| 波多野结衣在线观看一区二区三区| 久久国产精彩视频| 国产免费观看av| 美女网站色91| 久久99精品久久久久久三级| 91在线观看| 亚洲成人黄色影院| 久久国产这里只有精品| 欧美激情久久久久久久久久久| 亚洲精品一区中文字幕乱码| 老湿机69福利| 久久蜜桃精品| 国产精华一区二区三区| 3d成人动漫在线| 午夜精品福利一区二区三区蜜桃| 欧美成人福利在线观看| 巨人精品**| 萌白酱国产一区二区| 日日夜夜操视频| 国产成人精品一区二| 四虎一区二区| 欧美调教sm| 91精品国产高清一区二区三区| 男生草女生视频| 亚洲三级电影在线观看| 91深夜福利视频| 久草在现在线| 偷窥少妇高潮呻吟av久久免费| 中文字幕视频三区| 国内精品久久久久久久影视简单| 久久久久免费精品国产| 91尤物国产福利在线观看| 国产亚洲自拍一区| 欧美精品一区免费| 中文字幕一区图| 欧美剧在线观看| 一级片aaaa| 欧美激情一区三区| 日韩免费毛片视频| 全球av集中精品导航福利| 欧美极品xxxx| 国精品人妻无码一区二区三区喝尿 | 日韩av电影免费在线| 17videosex性欧美| 精品国精品国产| 九九热只有精品| 国产精品羞羞答答xxdd| 久久久成人精品一区二区三区 | 97伦理在线四区| 国产美女av在线| 91精品蜜臀在线一区尤物| 老司机深夜福利网站| 日韩av中文字幕一区二区 | 波多野结衣办公室双飞| 女人色偷偷aa久久天堂| 亚洲综合精品一区二区| 18视频在线观看| 欧美一区二区三区免费视频| 中文字幕av播放| 国产美女一区二区| 91免费版看片| theporn国产在线精品| 久久97久久97精品免视看| 国产wwwxxx| 亚洲综合偷拍欧美一区色| 中文字幕一区二区三区人妻在线视频 | 动漫av免费观看| 欧州一区二区| 成人av色在线观看| 日本高清在线观看| 亚洲第一国产精品| 九九热精品视频在线| 国产日韩精品视频一区| 日本肉体xxxx裸体xxx免费| 国产精品成人a在线观看| 亚洲aⅴ男人的天堂在线观看| 性欧美video高清bbw| 精品不卡在线视频| 日韩精品一区二区亚洲av| 国产欧美一区二区精品性色 | 夜夜躁日日躁狠狠久久av| 国产精品素人一区二区| 日本美女久久久| 999亚洲国产精| 日韩亚洲不卡在线| 国产视频一区二| 午夜精品久久久久久久久久久久久 | 日韩一级片免费在线观看| 精品日韩美女的视频高清| a视频免费观看| 精品综合久久久久久8888| 国产精品视频二| 国产剧情在线观看一区| 成人激情在线播放| 激情国产在线| 俺也去精品视频在线观看| 人妻一区二区三区| 欧洲一区在线观看| 免费在线看黄网址| 国产女人水真多18毛片18精品视频| 欧美视频亚洲图片| 亚洲影音一区| 97超碰人人爱| 国内精品视频在线观看| av资源站久久亚洲| 日本黄色一区| 777午夜精品福利在线观看| 77777影视视频在线观看| 亚洲成色www8888| 国产精品热久久| 富二代精品短视频| 欧美精品一级片| 欧美激情一区三区| a天堂视频在线观看| 韩国欧美国产一区| 国产又黄又猛视频| 亚洲激情精品| 日本xxxxx18| 久久免费精品视频在这里| 久久99精品久久久久久秒播放器| 国产在线一区不卡| 国产精品视频在线播放| 日本不卡1234视频| 九色成人免费视频| 免费av在线| 日韩毛片中文字幕| www.黄色一片| 欧美精品国产精品| 一区二区视频网| 在线观看一区二区视频| 黄色片视频网站| 亚洲一区二区三区在线播放| 久久av红桃一区二区禁漫| 久久久国产精品麻豆| 国产传媒第一页| 不卡的av电影| 成人三级做爰av| 国产一区二区福利视频| 国产aⅴ爽av久久久久| 免费欧美日韩国产三级电影| 精品一区二区中文字幕| 国产亚洲在线观看| 欧美视频免费看欧美视频| 欧美1区2区3区| 九九久久九九久久| 亚洲a一区二区三区| 一区二区三区三区在线| 日韩久久久久| 在线一区高清| 久久久精品久久久久久96| 中文字幕一区二区三区四区五区六区| 欧美色爱综合| 亚洲bbw性色大片| 欧美疯狂party性派对| 四虎一区二区| 91精品综合| 国产黄色激情视频| 亚洲网址在线| 欧美性大战久久久久xxx| 久久福利一区| 日韩av一二三四| 麻豆一区二区99久久久久| 五月激情婷婷在线| 国内成人免费视频| 亚洲一级Av无码毛片久久精品| 成人午夜激情片| 人妻丰满熟妇aⅴ无码| 久久精品人人做人人综合| 性欧美一区二区| 国产精品久久久久aaaa| h色网站在线观看| 亚洲一区二区三区自拍| 久久国产黄色片| 欧美性色aⅴ视频一区日韩精品| 91久久久久久久久久久久| 欧美一级理论片| 日韩在线观看视频网站| 亚洲精选中文字幕| www日韩tube| 欧美大胆在线视频| 国产美女高潮在线| 国产精品中文久久久久久久| 不卡精品视频| 国产一区再线| 久久视频在线| 拔插拔插海外华人免费| 快she精品国产999| 亚洲美女性囗交| 成人黄色a**站在线观看| 亚洲精品国产一区黑色丝袜| 最新高清无码专区| 精品国产免费观看| 欧美美女bb生活片| 人妻少妇精品无码专区久久| 色av中文字幕一区| xxx性欧美| 国产日本欧美一区二区三区| 2020最新国产精品| 日韩欧美一区二区三区四区| 亚洲午夜极品| 中文字幕第100页| 91在线观看高清| 欧美日韩在线观看成人| 色婷婷亚洲一区二区三区| 国产成人毛毛毛片| 亚洲天堂男人天堂女人天堂| 在线观看中文| 国产精品激情av电影在线观看| 成人性生交大片免费看中文视频| 图片区小说区区亚洲五月| 亚洲久久成人| 亚洲涩涩在线观看| 久久久亚洲国产美女国产盗摄| 人妻少妇精品一区二区三区| 91国产免费观看| 亚洲av成人精品日韩在线播放| 精品国产一区二区三区久久狼黑人 | 天堂中文在线资源| 久久影视免费观看| 99久久亚洲国产日韩美女| 国产午夜精品在线| 欧美高清不卡| 污网站在线免费| 国产免费成人在线视频| 成人午夜视频精品一区| 日韩精品资源二区在线| 日p在线观看| 国产精品久久久久久久久男| 日本午夜精品久久久| 大胆欧美熟妇xx| 国产成人综合视频| 国产小视频你懂的| 欧美性受xxxx| 国产日本在线观看| 茄子视频成人在线| 日韩大胆成人| 成熟了的熟妇毛茸茸| 99久久久精品| 欧美成人aaaaⅴ片在线看| 日韩三级精品电影久久久| 国产在线观看免费麻豆| 国产精品爽黄69天堂a| 日产精品一区二区| 手机在线看福利| 中文一区在线播放| 糖心vlog精品一区二区| 中文字幕亚洲第一| 国产极品一区| 亚洲午夜精品福利| 久久精品国产久精国产爱| 国产在视频线精品视频| 欧美日韩在线播| 久操视频在线播放| 91中文精品字幕在线视频| 9191国语精品高清在线| 国产成人精品综合久久久久99| 亚洲另类春色国产| 亚洲AV无码一区二区三区性| 欧美高清第一页| 精品少妇一区| 男人亚洲天堂网| 久久精品一二三| 亚洲天堂2021av| 久久夜色精品亚洲噜噜国产mv | 欧美尤物一区| 秋霞电影网一区二区| a一级免费视频| 日韩精品在线一区二区| japanese色国产在线看视频| 免费av在线一区二区| 日韩电影免费一区| 欧美在线视频第一页| 欧美不卡一区二区三区| 日本а中文在线天堂| 亚洲欧洲日韩精品| 国产乱码精品一区二区三区忘忧草 | 一级片一级片一级片| 精品久久人人做人人爱| 性爽视频在线| 亚洲一区不卡在线| 国产成人免费av在线| 在线观看亚洲天堂| 中文字幕在线观看日韩| 欧美黄视频在线观看| 日日碰狠狠添天天爽超碰97| 国产欧美1区2区3区| 亚洲av无码一区二区三区性色 | 国产欧美久久久精品影院| 国产又爽又黄又嫩又猛又粗| 久久久亚洲影院| 成人高清av| 蜜臀视频在线观看| 在线看国产一区二区| aaa大片在线观看| 蜜桃成人在线| 韩国一区二区三区| 伊人中文字幕在线观看| 久久久国产精品一区| 亚州综合一区| 91精品视频国产| 色综合一个色综合| 欧美高清另类hdvideosexjaⅴ| 欧美一级二级三级九九九| 国产精品亚洲一区二区三区在线| 最近免费中文字幕大全免费版视频| 久久中国妇女中文字幕|