java反射與動態代理

一、反射

1 基本概念:動態獲取類的信息,動態調用對象的方法

a 在運行時判定任一對象所屬的類

b 在運行時構造任一類的對象:(如servlet容器通過反射來初始化對應的servlet)

c 在運行時判定任一類所具有的成員變量和方法

d 在運行時調用任一對象的方法

e 生成動態代理

2 主要類:

Class:代表一個類

Field:代表類的成員變量(類的屬性)

Method:代表類的方法

Constructor:代表類的構造方法

Array:提供了動態創建數組,一級訪問數組元素的靜態方法

3 Class類的方法:

getName()

getFields()

getMethods()

4:通過反射創建對象的方法:

Class classType = Class.forName("className");

classType.newInstance();


二、代理

1 基本概念

就是在調用實現類的方法時,可在方法的執行前後做額外的工作。

代理類:主要負責爲委託類預處理消息,過濾消息,吧消息轉發給委託類,以及事後處理消息等。代理類的對象與一個委託類的對象關聯,代理類的對象本身並不真正實現服務,而是通過調用委託類的對象的相關方法,提供特定的服務。

如遠程方法調用,權限控制,對開銷較大資源的訪問控制等

靜態代理類:在程序運行前,代理類的.class文件已經存在

動態代理類:在程序運行時,運用反射來動態創建生成。動態代理類的字節碼在程序運行時由java反射機制動態生成,無需程序員手動編寫它的源代碼,從而簡化了編程,提高擴展性



三、使用java實現動態代理的方法



1 定義一個被代理類的接口,如PersonBean

2 定義一個完成具體功能的被代理類,如PersonBeanImpl implements PersonBean

3 定義一個InvocationHandler接口的實現類,如OwnerInvocationHandler,並實現其invoke(Object proxy,Method method,Object[] args)方法,則任何通過代理類Proxy的請求調用都會調用OwnerInvocationHandler的invoke方法來完成相應功能。

4 創建Proxy並實例化Proxy對象:使用Proxy.newProxyInstance(ClassLoader,Interfaces,InvocationHandler)來創建一個代理類的實例,如

PersonBean proxyBean = (PersonBean)Proxy.newProxyInstance(person.getClass().getClassLoader(),person.getClass().getInterfaces(),new OwnerInvocationHandler(person));    其中person是一個具體的被代理類PersonBeanImpl實例

5 調用proxyBean即可完成代理的使用


四、遠程代理的原理說明




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章