課程
/后端開發(fā)
/Java
/模式的秘密---代理模式
Prooxy.newProxyInstance 第一個參數(shù)用實例化類的加載器和用接口類的加載器的區(qū)別
2016-12-26
源自:模式的秘密---代理模式 2-3
正在回答
//創(chuàng)建代理對象,因為代理代理對象實現(xiàn)的都是同一個接口所以產(chǎn)生的代理對象是實現(xiàn)的接口,變現(xiàn)了多態(tài)的作用
Proxy.newProxyInstance(加載器,實現(xiàn)的接口,處理器);
加載器:就是類加載器
實現(xiàn)接口:就是car中繼承的接口
處理器:就是我們寫的那個處理器,TimeHanlder
我們首先要明白靜態(tài)代理的是怎么一會事,1:首先要實現(xiàn)InvocationHandler處理器的接口,這個接口里面只有一個方法invoke,弄明白這個方法里面的各個參數(shù)的含義,object(Object),被代理的對象,method(Method),被代理的對象方法,args(Object[])是方法里面的參數(shù);通過實現(xiàn)的實現(xiàn)InvocationHandler接口的類,進行有參構(gòu)造獲取參數(shù),public class TimeHandler implements InvocationHandler{//有參構(gòu)造獲取參數(shù),寫了有參構(gòu)造,默認的無參構(gòu)造就會不存在,如果想存在,可以在寫一個無參構(gòu)造public TimeHandler(Object target){super();//可以不寫,因為有默認的this.target=target;}private Object target;}//實現(xiàn)接口的方法public Object invoke(Object object,Method method,Object[] args){//在次添加額外的數(shù)據(jù)syso(“馬上開始”);//簡寫//mthod的類型是Method,通過代理的對象獲,獲取被代理的方法,car對象中的方法沒有參數(shù),就可以不添加參數(shù)method.invoke(target);//獲取到被代理的方法,如果是被代理的對象是car的話,這個方法就是car實現(xiàn)那個方法、syso("結(jié)束");};
同問。。。
秋天的童話4 提問者
舉報
本節(jié)課程將帶你領(lǐng)略Java編程語言中代理模式的奧妙
2 回答TimeHandler中的invoke方法為什么有兩個參數(shù)?第一個參數(shù)根本沒用到
2 回答附加問題,invoke方法所需的第一個參數(shù)Object您都是用一個成員變量代替這樣和直接使用第一個變量有什么不同?
1 回答Handler中的invoke方法的第一個參數(shù)指的是代理對象還是被代理對象?
2 回答InvocationHandler接口中invoke()的第一個參數(shù)真心蛋疼!其次,構(gòu)造函數(shù)注入只能注入一次(只能代理一個對象,而不是不同類的對象)
1 回答newProxyInstance函數(shù)里邊最后一個參數(shù)和創(chuàng)建類的實例有什么關(guān)系???
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-01-14
//創(chuàng)建代理對象,因為代理代理對象實現(xiàn)的都是同一個接口所以產(chǎn)生的代理對象是實現(xiàn)的接口,變現(xiàn)了多態(tài)的作用
Proxy.newProxyInstance(加載器,實現(xiàn)的接口,處理器);
加載器:就是類加載器
實現(xiàn)接口:就是car中繼承的接口
處理器:就是我們寫的那個處理器,TimeHanlder
2017-01-14
我們首先要明白靜態(tài)代理的是怎么一會事,
1:首先要實現(xiàn)InvocationHandler處理器的接口,這個接口里面只有一個方法invoke,弄明白這個方法里面的各個參數(shù)的含義,object(Object),被代理的對象,method(Method),被代理的對象方法,args(Object[])是方法里面的參數(shù);
通過實現(xiàn)的實現(xiàn)InvocationHandler接口的類,進行有參構(gòu)造獲取參數(shù),
public class TimeHandler implements InvocationHandler{
//有參構(gòu)造獲取參數(shù),寫了有參構(gòu)造,默認的無參構(gòu)造就會不存在,如果想存在,可以在寫一個無參構(gòu)造
public TimeHandler(Object target){
super();//可以不寫,因為有默認的
this.target=target;
}
private Object target;
}
//實現(xiàn)接口的方法
public Object invoke(Object object,Method method,Object[] args){
//在次添加額外的數(shù)據(jù)
syso(“馬上開始”);//簡寫
//mthod的類型是Method,通過代理的對象獲,獲取被代理的方法,car對象中的方法沒有參數(shù),就可以不添加參數(shù)
method.invoke(target);//獲取到被代理的方法,如果是被代理的對象是car的話,這個方法就是car實現(xiàn)那個方法
、
syso("結(jié)束");
};
2016-12-27
同問。。。