這個知識點不多,但屬于java的高級技術,相信熟悉SPRING的朋友對它一定不會陌生,今天花了點時間對java的動態代理進行了學習,感覺還可以,因為是結合spring來看的,所以練習的是面向接口的代理模式,但應該也是最常用的動態代理..,廢話不多說,看例子:
package?org.diego;


public?interface?Ip?
{
????public?void?say();
}

實現類:
package?org.diego;


public?class?P?implements?Ip
{

????public?void?say()
{
????????System.out.println("hello");
????}
}

代理類:
package?org.diego;

import?java.lang.reflect.InvocationHandler;
import?java.lang.reflect.Method;


class?TraceHandler?implements?InvocationHandler?
{
????private?Object?target;


????public?TraceHandler(Object?t)?
{
????????target?=?t;
????}


????public?Object?invoke(Object?proxy,?Method?method,?Object[]?args)?throws?Throwable?
{
????????//?TODO?Auto-generated?method?stub

????????if?(method.getName().startsWith("say"))?
{
????????????System.out.println("hello,before?method
");
????????????Object?result?=?method.invoke(target,?args);
????????????System.out.println("World,after?method
");
????????????return?result;
????????}
????????return?null;
????????
????}
}
測試類:

/**//*
?*?@author?diego.liu
?*?@contact?vista.lbw@gmail.com
?*?@date?2006-11-7
?*/
package?org.diego;

import?java.lang.reflect.InvocationHandler;
import?java.lang.reflect.Proxy;


public?class?ProxyTest?
{


????public?static?void?main(String[]?args)?
{
????????P?test?=?new?P();
????????InvocationHandler?handler?=?new?TraceHandler(test);
????????Ip?proxy?=?(Ip)?Proxy.newProxyInstance(test.getClass().getClassLoader(),?test.getClass().getInterfaces(),
????????????????handler);
????????proxy.say();
????}

}

已經測試可以運行,歡迎拍磚。。。








實現類:












代理類:


































測試類:



























已經測試可以運行,歡迎拍磚。。。