一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - java 中動態代理詳解及實例

java 中動態代理詳解及實例

2020-11-08 17:09donggua3694857 JAVA教程

這篇文章主要介紹了java 中動態代理詳解及實例的相關資料,需要的朋友可以參考下

Java動態代理相關

先來看靜態代理模式代碼:

java" id="highlighter_397021">
?
1
2
3
4
5
6
package test;
 
public interface Subject
{
 public void doSomething();
}
?
1
2
3
4
5
6
package test;
public class RealSubject implements Subject{
 public void doSomething() {
 System.out.println( "call doSomething()" );
 }
}
?
1
2
3
4
5
6
7
package test;
public class SubjectProxy implements Subject {
 Subject subimpl = new RealSubject();
 public void doSomething() {
 subimpl.doSomething();
 }
}
?
1
2
3
4
5
6
7
package test;
public class TestProxy {
 public static void main(String args[]) {
 Subject sub = new SubjectProxy(); 
 sub.doSomething();
 }
}

剛開始我會覺得SubjectProxy定義出來純屬多余,直接實例化實現類完成操作不就結了嗎?后來隨著業務龐大,你就會知道,實現proxy類對真實類的封裝對于粒度的控制有著重要的意義。但是靜態代理這個模式本身有個大問題,如果類方法數量越來越多的時候,代理類的代碼量是十分龐大的。所以引入動態代理來解決此類問題。

先看代碼:

?
1
2
3
4
5
6
package test;
 
public interface Subject
{
 public void doSomething();
}
?
1
2
3
4
5
6
package test;
public class RealSubject implements Subject {
 public void doSomething() {
 System.out.println( "call doSomething()" );
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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; //綁定委托對象,并返回代理類
 public Object bind(Object tar) {
 this.tar = tar; //綁定該類實現的所有接口,取得代理類
 return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this);
 }
 public Object invoke(Object proxy , Method method , Object[] args)throws Throwable {
 Object result = null;
 //這里就可以進行所謂的AOP編程了
 //在調用具體函數方法前,執行功能處理
 result = method.invoke(tar,args);
 //在調用具體函數方法后,執行功能處理
 return result;
 }
}
?
1
2
3
4
5
6
7
public class TestProxy {
public static void main(String args[]) {
 ProxyHandler proxy = new ProxyHandler(); //綁定該類實現的所有接口
 Subject sub = (Subject) proxy.bind(new RealSubject());
 sub.doSomething();
 }
}

看完代碼,現在我來回答,動態代理的作用是什么:

Proxy類的代碼量被固定下來,不會因為業務的逐漸龐大而龐大;

可以實現AOP編程,實際上靜態代理也可以實現,總的來說,AOP可以算作是代理模式的一個典型應用;

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

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

原文鏈接:http://blog.csdn.net/donggua3694857/article/details/52699141

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久国产精品无码视欧美 | 婷婷精品进入 | 成版人快猫永久破解版 | 韩国最新理论三级在线观看 | 日本mature乱子视频 | 日本动漫黄网站在线观看 | 免费网站国产 | 黄网久久 | 成人天堂入口网站 | 国产a一级毛片午夜剧院 | chinese男男gay | 国产欧美一区二区三区精品 | 百合女女师生play黄肉黄 | 日韩欧美国产一区 | 国产在线极品 | 亚洲国产精品久久网午夜小说 | 香蕉大久久 | 精品亚洲欧美中文字幕在线看 | 日韩无砖专区体验区 | 韩国美女vip内部2020 | 日本一道本中文字幕 | 99热国产在线观看 | 91免费永久国产在线观看 | 欧美日韩人成在线观看 | 美女被狂揉下部羞羞动漫 | 91狠狠| 国产伦码精品一区二区三区 | 欧美另类性xxoo | 日本xxoo动图网站欧美 | 国产图色 | 午夜精品久视频在线观看 | 色欲麻将 | 成人久久18免费网站入口 | 91青青国产在线观看免费 | 91成| 干妞网免费视频 | 亚洲欧美日韩国产综合专区 | 人人看人人射 | 国产精品免费网站 | 4438全国免费观看 | 爱豆传媒最新视频国产 |