首先定義一個(gè)抽象接口,JDK代理要求目標(biāo)對(duì)象必須實(shí)現(xiàn)接口。(個(gè)人覺(jué)得這個(gè)應(yīng)該是基于接口編程)
以UserManager接口為例。在里面我們定義了一個(gè)add方法。
接下來(lái)定義接口實(shí)現(xiàn)類。為了簡(jiǎn)潔只是向客戶端輸出一句話。
下面是我們的動(dòng)態(tài)代理類。代理類實(shí)現(xiàn)了java.lang.reflect.InvocationHandler接口。
動(dòng)態(tài)代理機(jī)制用到j(luò)ave反射方面的api,反射方面的資料往上很多的。不清楚的可以先查閱讀一下
代理類我添加很多注釋。應(yīng)該很清楚了。這里我簡(jiǎn)單說(shuō)一下流程:當(dāng)代理對(duì)象被調(diào)用的時(shí)候先會(huì)執(zhí)行invoke方法,在此方法里面我們可添加
自己的業(yè)務(wù)邏輯代碼,然后才會(huì)執(zhí)行目標(biāo)對(duì)象的真實(shí)方法:method.invoke(this.targetObject, args);目標(biāo)對(duì)象方法可能會(huì)有返回值,在這
里當(dāng)存在返回值的時(shí)候我們返回一個(gè)Object.
下面代碼是客戶端調(diào)用和調(diào)用結(jié)果:
控制臺(tái)輸出結(jié)果:
這是代理方法
用戶 : 張三 添加成功