最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 中動(dòng)態(tài)代理詳解及實(shí)例

 更新時(shí)間:2017年06月05日 09:05:57   投稿:lqh  
這篇文章主要介紹了java 中動(dòng)態(tài)代理詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

Java動(dòng)態(tài)代理相關(guān)

先來(lái)看靜態(tài)代理模式代碼:

package test; 
 
public interface Subject 
{ 
 public void doSomething(); 
} 

package test; 
public class RealSubject implements Subject{ 
 public void doSomething() { 
 System.out.println( "call doSomething()" ); 
 } 
} 

package test; 
public class SubjectProxy implements Subject { 
 Subject subimpl = new RealSubject(); 
 public void doSomething() { 
 subimpl.doSomething(); 
 } 
} 
package test; 
public class TestProxy { 
 public static void main(String args[]) { 
 Subject sub = new SubjectProxy();  
 sub.doSomething(); 
 } 
} 

剛開(kāi)始我會(huì)覺(jué)得SubjectProxy定義出來(lái)純屬多余,直接實(shí)例化實(shí)現(xiàn)類完成操作不就結(jié)了嗎?后來(lái)隨著業(yè)務(wù)龐大,你就會(huì)知道,實(shí)現(xiàn)proxy類對(duì)真實(shí)類的封裝對(duì)于粒度的控制有著重要的意義。但是靜態(tài)代理這個(gè)模式本身有個(gè)大問(wèn)題,如果類方法數(shù)量越來(lái)越多的時(shí)候,代理類的代碼量是十分龐大的。所以引入動(dòng)態(tài)代理來(lái)解決此類問(wèn)題。

先看代碼:

package test; 
 
public interface Subject 
{ 
 public void doSomething(); 
} 
package test; 
public class RealSubject implements Subject { 
 public void doSomething() { 
 System.out.println( "call doSomething()" ); 
 } 
} 
package test; 
import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
public class ProxyHandler implements InvocationHandler { 
 private Object tar; //綁定委托對(duì)象,并返回代理類 
 public Object bind(Object tar) { 
 this.tar = tar; //綁定該類實(shí)現(xiàn)的所有接口,取得代理類 
 return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); 
 } 
 public Object invoke(Object proxy , Method method , Object[] args)throws Throwable { 
 Object result = null; 
 //這里就可以進(jìn)行所謂的AOP編程了 
 //在調(diào)用具體函數(shù)方法前,執(zhí)行功能處理 
 result = method.invoke(tar,args); 
 //在調(diào)用具體函數(shù)方法后,執(zhí)行功能處理 
 return result; 
 } 
} 
public class TestProxy { 
public static void main(String args[]) { 
 ProxyHandler proxy = new ProxyHandler(); //綁定該類實(shí)現(xiàn)的所有接口 
 Subject sub = (Subject) proxy.bind(new RealSubject()); 
 sub.doSomething(); 
 } 
} 

看完代碼,現(xiàn)在我來(lái)回答,動(dòng)態(tài)代理的作用是什么:

Proxy類的代碼量被固定下來(lái),不會(huì)因?yàn)闃I(yè)務(wù)的逐漸龐大而龐大;

可以實(shí)現(xiàn)AOP編程,實(shí)際上靜態(tài)代理也可以實(shí)現(xiàn),總的來(lái)說(shuō),AOP可以算作是代理模式的一個(gè)典型應(yīng)用;

解耦,通過(guò)參數(shù)就可以判斷真實(shí)類,不需要事先實(shí)例化,更加靈活多變。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論

西安市| 连云港市| 潜山县| 朝阳区| 涞源县| 灌南县| 麦盖提县| 麦盖提县| 丰原市| 广元市| 天峨县| 绥化市| 晴隆县| 宁晋县| 揭阳市| 南岸区| 郯城县| 锦屏县| 阳春市| 札达县| 安庆市| 永城市| 嘉鱼县| 梓潼县| 云阳县| 交城县| 博乐市| 亚东县| 龙陵县| 昭平县| 邢台县| 遂川县| 久治县| 中宁县| 山东| 古蔺县| 禹城市| 寿宁县| 尉犁县| 石棉县| 库车县|