一直分不清的兩個(gè)東西,今天記錄一下,java反射與動(dòng)態(tài)代理
java反射:1、在運(yùn)行時(shí)分析類的能力
2、在運(yùn)行是查看對(duì)象
3、實(shí)現(xiàn)數(shù)組的操作代碼
4、利用Method對(duì)象
在java.lang.reflect包中有三個(gè)類Field、Method、Constructor分別用于描述類的域、方法和構(gòu)造器,這三個(gè)類都有一個(gè)叫做getName的方法,用來(lái)返回相應(yīng)的名稱。
Field類有一個(gè)getType方法,用于返回描述域所數(shù)類型的Class類型對(duì)象。Method和Contructor類包含有能夠報(bào)告參數(shù)類型的方法,Method類型還可以報(bào)告返回類型
這是三個(gè)類還有一個(gè)叫做getModifiers的方法,它將返回一個(gè)整型數(shù)值,用不同的位開關(guān)設(shè)置描述public和static這些修飾的使用狀況。
另外,還可以利用java.lang.reflect包中的Modifier類的靜態(tài)方法分析getModifiers返回的整型數(shù)值。例如Modifire.isPublic,isPrivate,isFinal等等
class類中的getFields,getMethods和getConstructors方法將分別返回類支持的public域,方法和構(gòu)造器數(shù)組,其中包括超類的共有成員。Class類的getDeclareFields
getDeclareMethods和getDeclaredConstructors方法分別返回類中聲明的全部與,方法和構(gòu)造器數(shù)組,其中包括私有和受保護(hù)的成員,但不包括超類的成員,以下java代碼是用了反射的一小段代碼
動(dòng)態(tài)代理:代理模式 ,這是一種設(shè)計(jì)模式 而java反射是java語(yǔ)言分析類結(jié)構(gòu),動(dòng)態(tài)執(zhí)行java程序的本身具有的一種能力,和模式?jīng)]關(guān)系
代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會(huì)存在關(guān)聯(lián)關(guān)系,一個(gè)代理類的對(duì)象與一個(gè)委托類的對(duì)象關(guān)聯(lián),代理類的對(duì)象本身并不真正實(shí)現(xiàn)服務(wù),而是通過(guò)調(diào)用委托類的對(duì)象的相關(guān)方法,來(lái)提供特定的服務(wù)。
當(dāng)然兩者結(jié)合起來(lái)可以干很多事,比如面向aop編程,Spring的aop就是這么干的,這里不多說(shuō),并且很多框架都用了反射,在執(zhí)行某個(gè)方法,獲取參數(shù)時(shí)就會(huì)用到,反射是獲取不到方法執(zhí)行的參數(shù)的
資料引用:java核心技術(shù)第一版
轉(zhuǎn)載之后請(qǐng)注明出處:http://blog.csdn.net/xh199110/article/details/39620473 飛天博客
謝謝