java反射


序言:

      在學習java基礎時,由於學的不扎實,講的實用性不強,就覺得沒用,很多重要的知識就那樣一筆帶過了,像這個馬上要講的反射機制一樣,當時學的時候就忽略了,到后來學習的知識中,很多東西動不動就用反射,所以回過頭來把這個給重新補一下,自己欠下的債,遲早是要還的。

反射的概念:

在運行狀態中,對於任意一個類,都能夠獲取到這個類的所有屬性和方法,對於任意一個對象,都能夠調用它的任意一個方法和屬性(包括私有的方法和屬性),這種動態獲取的信息以及動態調用對象的方法的功能就稱為java語言的反射機制。通俗點講,通過反射,該類對我們來說是完全透明的,想要獲取任何東西都可以。

獲取字節碼文件對象的三種方式:

1、Class clazz1 = Class.forName("全限定類名");  //通過Class類中的靜態方法forName,直接獲取到一個類的字節碼文件對象,此時該類還是源文件階段,並沒有變為字節碼文件。

2、Class clazz2  = Person.class;    //當類被加載成.class文件時,此時Person類變成了.class,在獲取該字節碼文件對象,也就是獲取自己, 該類處於字節碼階段。

3、Class clazz3 = p.getClass();    //通過類的實例獲取該類的字節碼文件對象,該類處於創建對象階段

 

通過反射機制可以獲取到哪些信息:

1.創建實例

 

 2。獲取指定構造器方法。

3.獲取指定成員變量

3.1獲取全部成員變量

4.獲得方法並使用  Method

*反射的代理實現:

反射的重點是代理的實現,因為在以后的開發中經常用到,例:spring框架的aop聲明式事務控制,就要用到動態代理的實現。

代理分動態代理和靜態代理,這里主要介紹動態代理:動態代理是一種設計模式,其非常簡單,很容易理解,你自己可以做這件事,但是覺得自己做非常麻煩或者不方便,所以就叫一個另一個人(代理)來幫你做這個事情,而你就不用管了,這就是動態代理。舉個例子,買火車票叫人代買。

我們此處主要介紹JDK提供的代理,也是比較好用的一種代理,

1、new出代理對象,通過實現InvacationHandler接口,然后new出代理對象來。

2、通過Proxy類中的靜態方法newProxyInstance,來將代理對象假裝成那個被代理的對象,也就是如果叫人幫我們代買火車票一樣,那個代理就假裝成我們自己本人

3、執行方法,代理成功

 

另外還有cglib,Proxy類中的方法創建動態代理類對象,這里就不多介紹了,以后用到再補充。


免責聲明!

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



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