標籤:java java反射 動態代理
一直分不清的兩個東西,今天記錄一下,java反射與動態代理
java反射:1、在運行時分析類的能力
2、在運行是查看對象
3、實現數組的作業碼
4、利用Method對象
在java.lang.reflect包中有三個類Field、Method、Constructor分別用於描述類的域、方法和構造器,這三個類都有一個叫做getName的方法,用來返回相應的名稱。
Field類有一個getType方法,用於返回描述域所數類型的Class類型對象。Method和Contructor類包含有能夠報告參數類型的方法,Method類型還可以報告傳回型別
這是三個類還有一個叫做getModifiers的方法,它將返回一個整型數值,用不同的位開關設定描述public和static這些修飾的使用狀況。
另外,還可以利用java.lang.reflect包中的Modifier類的靜態方法分析getModifiers返回的整型數值。例如Modifire.isPublic,isPrivate,isFinal等等
class類中的getFields,getMethods和getConstructors方法將分別返回類支援的public域,方法和構造器數組,其中包括超類的共有成員。Class類的getDeclareFields
getDeclareMethods和getDeclaredConstructors方法分別返回類中聲明的全部與,方法和構造器數組,其中包括私人和受保護的成員,但不包括超類的成員,以下java代碼是用了反射的一小段代碼
Class<Test> c=Test.class;Test t=c.newInstance();t.setId(1);Field f=c.getDeclaredField("id");f.setAccessible(true);System.out.println(f.get(t));f.setAccessible(false);Method m=c.getMethod("getId");Object o=m.invoke(t);System.out.print(o);
動態代理:代理模式 ,這是一種設計模式 而java反射是java語言分析類結構,動態執行java程式的本身具有的一種能力,和模式沒關係
代理模式是常用的java設計模式,他的特徵是代理類與委託類有同樣的介面,代理類主要負責為委託類預先處理訊息、過濾訊息、把訊息轉寄給委託類,以及事後處理訊息等。代理類與委託類之間通常會存在關聯關係,一個代理類的對象與一個委託類的對象關聯,代理類的對象本身並不真正實現服務,而是通過調用委託類的對象的相關方法,來提供特定的服務。
當然兩者結合起來可以幹很多事,比如面向aop編程,Spring的aop就是這麼乾的,這裡不多說,並且很多架構都用了反射,在執行某個方法,擷取參數時就會用到,反射是擷取不到方法執行的參數的
資料引用:java核心技術第一版
java反射與動態代理