天天看點

java反射

序言:

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

反射的概念:

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

擷取位元組碼檔案對象的三種方式:

1、Class clazz1 = Class.forName("全限定類名");  //通過Class類中的靜态方法forName,直接擷取到一個類的位元組碼檔案對象,此時該類還是源檔案階段,并沒有變為位元組碼檔案。

2、Class clazz2  = Person.class;    //當類被加載成.class檔案時,此時Person類變成了.class,在擷取該位元組碼檔案對象,也就是擷取自己, 該類處于位元組碼階段。

3、Class clazz3 = p.getClass();    //通過類的執行個體擷取該類的位元組碼檔案對象,該類處于建立對象階段

通過反射機制可以擷取到哪些資訊:

1.建立執行個體

java反射

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

java反射

3.擷取指定成員變量

java反射

3.1擷取全部成員變量

java反射

4.獲得方法并使用  Method

java反射

*反射的代理實作:

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

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

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

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

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

3、執行方法,代理成功

java反射
java反射

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

原文位址:https://www.cnblogs.com/jingyukeng/p/10235580.html

繼續閱讀