歡迎來到小米的博客
希望能和您交流Java編程的知識和見解
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-57 評論-202 文章-17 trackbacks-0
JDK Dynamic Proxy模式的簡單范例
在JDK1.3版本中引入了Dynamic Proxy的代理機制,通過實現java.lang.reflect.InvocationHandler接口,可以實現攔截需要改寫的方法。下面是一個簡單范例。
有下面一個接口TestInterface和它的一個實現TestImpl:
package sample.proxy;
/**/
/*
*
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author George Hill
* @version 1.0
*/
public
interface
TestInterface
{
public
String print();
}
package sample.proxy;
/**/
/*
*
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author George Hill
* @version 1.0
*/
public
class
TestImpl implements TestInterface
{
public
String print()
{
return
"
Hello, it's from TestImpl class
"
;
}
}
下面攔截print方法,調用自己的實現,這需要實現java.lang.reflect.InvocationHandler接口。
package sample.proxy;
import java.lang.reflect.
*
;
/**/
/*
*
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author George Hill
* @version 1.0
*/
public
class
TestHandler implements InvocationHandler
{
TestInterface test;
/**/
/*
*
* 將動態代理綁定到指定的TestInterface
* @param test TestInterface
* @return TestInterface 綁定代理后的TestInterface
*/
public
TestInterface bind(TestInterface test)
{
this
.test
=
test;
TestInterface proxyTest
=
(TestInterface) Proxy.newProxyInstance(
test.getClass().getClassLoader(), test.getClass().getInterfaces(),
this
);
return
proxyTest;
}
/**/
/*
*
* 方法調用攔截器,攔截print方法
* @param proxy Object
* @param method Method
* @param args Object[]
* @return Object
* @throws Throwable
*/
public
Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
//
如果調用的是print方法,則替換掉
if
(
"
print
"
.equals(method.getName()))
{
return
"
HaHa, It's come from TestHandler
"
;
}
else
{
return
method.invoke(
this
.test, args);
}
}
}
下面是測試用例:
package sample.test;
import junit.framework.
*
;
import sample.proxy.
*
;
/**/
/*
*
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author George Hill
* @version 1.0
*/
public
class
TestDynamicProxy extends TestCase
{
private
TestInterface test
=
null
;
protected
void
setUp() throws Exception
{
super.setUp();
TestHandler handler
=
new
TestHandler();
//
用handler去生成實例
test
=
handler.bind(
new
TestImpl());
}
protected
void
tearDown() throws Exception
{
test
=
null
;
super.tearDown();
}
public
void
testPrint()
{
System.
out
.println(test.print());
}
}
運行測試用例,可以看到輸出的是“HaHa, It's come from TestHandler”。
posted on 2005-05-24 17:47
小米
閱讀(3499)
評論(3)
編輯
收藏
所屬分類:
Java
評論:
#
re: JDK Dynamic Proxy模式的簡單范例 2005-10-20 13:10 |
鳥不生蛋蛋的地方
if ("print".equals(method.getName())) {
return "HaHa, It's come from TestHandler";
} else {
return method.invoke(this.test, args);
為什么這里的返回改成return method.invoke(proxy, args);就不行,這兩個應該應用同一個對象吧,請教
回復
更多評論
#
re: JDK Dynamic Proxy模式的簡單范例 2005-12-08 11:11 |
寂寞邀請
操作順序 client->proxy->this.test->實際的操作
換成return method.invoke(proxy, args),就死循環了。
client->proxy->proxy->proxy...........
回復
更多評論
#
re: JDK Dynamic Proxy模式的簡單范例[未登錄]
2011-06-20 17:40 |
fox
簡單,明了
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
由JComponent生成BufferedImage
如何將BufferedImage實例保存為BMP文件
關閉JBuilder2005的Smart MemberInsight功能
用JFreeChart畫柱狀圖的范例
用ChartDirector在JSP中畫統計圖
用java.util.Timer定時執行任務
JavaMail的簡單實例
如何比較兩個有可能為null的實例
從SocketChannel對象池中獲取的實例,使用時應注意的問題
JDK Dynamic Proxy模式的簡單范例
小米,生活在深圳,專注于Java,主要從事數據庫和網頁編程。現在在學習著Hibernate和Spring。喜歡游戲、音樂和臺球。聯系方式:georgehill@21cn.com
<
2005年5月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(27)
給我留言
查看公開留言
查看私人留言
隨筆分類
Hibernate(15)
Java(17)
Spring(1)
Struts(5)
其它(5)
數據庫(2)
生活隨筆(12)
隨筆檔案
2006年4月 (1)
2006年3月 (1)
2005年8月 (1)
2005年7月 (11)
2005年6月 (13)
2005年5月 (30)
文章分類
Eclipse(1)
Java(8)
其它(8)
文章檔案
2005年7月 (1)
2005年6月 (13)
2005年5月 (3)
我的朋友們
emu的博客
Java BY
我的鏈接
Java Research
SUN Java技術中文社區
拯救程序員王俊
搜索
積分與排名
積分 - 233088
排名 - 247
最新評論
1.?re: Hibernate的一對一關聯實例
根據寫了報錯了是怎么回事
--33
2.?re: 用java.util.Timer定時執行任務
評論內容較長,點擊標題查看
--yunp
3.?re: Hibernate的一對一關聯實例
好樣的
--vds
4.?re: 如何在Struts中實現分頁顯示數據(1)
PageData中的集合是所有都取出,還是用多少取多少,若是前者,會拖慢系統的。
--李亞男
5.?re: BMP文件格式
評論內容較長,點擊標題查看
--見面
閱讀排行榜
1.?用java.util.Timer定時執行任務(33741)
2.?用JFreeChart畫柱狀圖的范例(10690)
3.?《深入淺出Hibernate》讀書筆記(3)——數據緩存(6107)
4.?《深入淺出Hibernate》讀書筆記(8)——Hibernate分頁(5554)
5.?用ChartDirector在JSP中畫統計圖(5246)
評論排行榜
1.?如何在Struts中實現分頁顯示數據(2)(25)
2.?獻出一份愛心 共同援助重病程序員王俊(22)
3.?Struts的國際化完整解決方案(11)
4.?2005年6月27日,一個值得紀念的日子(9)
5.?《深入淺出Hibernate》讀書筆記(1)——實體對象生命周期(9)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 小米
主站蜘蛛池模板:
亚洲一区二区观看播放
|
日本一道综合久久aⅴ免费
|
亚洲黄片毛片在线观看
|
亚洲人成电影网站
|
免费a级毛片无码a∨免费软件
|
国产无遮挡吃胸膜奶免费看
|
亚洲欧洲日本天天堂在线观看
|
中文字幕无码免费久久
|
jlzzjlzz亚洲乱熟在线播放
|
亚洲大尺度无码无码专线一区
|
免费大片黄在线观看yw
|
亚洲精品视频免费看
|
久久久久久久99精品免费观看
|
亚洲AV无码专区日韩
|
国产亚洲福利精品一区二区
|
国产免费av片在线无码免费看
|
亚洲中文字幕无码久久2020
|
亚洲AV无码久久精品蜜桃
|
看一级毛片免费观看视频
|
看全色黄大色大片免费久久
|
亚洲国产成人无码AV在线
|
成人免费视频试看120秒
|
亚洲午夜福利在线视频
|
嫩草影院免费观看
|
亚洲欧美成人av在线观看
|
女人被男人桶得好爽免费视频
|
最新亚洲精品国偷自产在线
|
久久99精品国产免费观看
|
久久久综合亚洲色一区二区三区
|
国产在线精品一区免费香蕉
|
亚洲中文字幕不卡无码
|
男人j进入女人j内部免费网站
|
亚洲精品少妇30p
|
青青青国产手机频在线免费观看
|
亚洲狠狠狠一区二区三区
|
91久久成人免费
|
亚洲精品无码少妇30P
|
免费一级做a爰片性色毛片
|
j8又粗又长又硬又爽免费视频
|
亚洲午夜久久久久久噜噜噜
|
四虎影视在线影院在线观看免费视频
|