轉自:http://www.cnblogs.com/kongxx/archive/2005/08/08/209749.html
Java動態代理實現
Kongxx
在目前的Java開發包中包含了對動態代理的支持,但是其實現只支持對接口的的實現。
其實現主要通過是java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler接口。
Proxy類主要用來獲取動態代理對象,InvocationHandler接口用來約束調用者實現,如下,HelloWorld接口定義的業務方法,HelloWorldImpl是HelloWorld接口的實現,HelloWorldHandler是InvocationHandler接口實現。代碼如下:
業務接口:
業務接口實現:
InvocationHandler實現,需要在接口方法調用前後加入一部份處理工作,這裏僅僅在方法調用前後向後臺輸出兩句字符串,其代碼如下:
首先獲取一個業務接口的實現對象;
獲取一個InvocationHandler實現,此處是HelloWorldHandler對象;
創建動態代理對象;
通過動態代理對象調用sayHelloWorld()方法,此時會在原始對象HelloWorldImpl. sayHelloWorld()方法前後輸出兩句字符串。
運行測試類輸出如下:
-------------------------------
before method invoke!
Hello World!
after method invoke!
-------------------------------
此處Test類中的方法調用代碼比較多,在我們的實際應用中可以通過配置文件來來簡化客戶端的調用實現。另外也可以通過動態代理來實現簡單的AOP。