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