標籤:world class span business getc nts imp 代理類 gic
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.lang.reflect.Method; //抽象角色:java動態代理的實現目前只支援介面,不支援抽象類別 interface BusinessFoo { void foo(); } interface BusinessBar{ String bar(String message);}//真實角色:真正實現商務邏輯方法class BusinessFooImpl implements BusinessFoo{ public void foo() { System.out.println("BusinessFooImpl.foo()"); }}class BusinessBarImpl implements BusinessBar{ public String bar(String message) { System.out.println("BusinessBarImpl.bar()"); return message; }}//動態角色:動態組建代理程式類class BusinessImplProxy implements InvocationHandler{ private Object obj; BusinessImplProxy() { } BusinessImplProxy(Object obj) { this.obj = obj; } public Object invoke(Object proxy,Method method,Object[] args) throws Throwable { Object result = null; doBefore(); result = method.invoke(obj,args); doAfter(); return result; } public void doBefore(){ System.out.println("do something before Business Logic"); } public void doAfter(){ System.out.println("do something after Business Logic"); } public static Object factory(Object obj) { Class cls = obj.getClass(); return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new BusinessImplProxy(obj)); }}//測試類別public class DynamicProxy{ public static void main(String[] args) throws Throwable { BusinessFooImpl bfoo = new BusinessFooImpl(); BusinessFoo bf = (BusinessFoo)BusinessImplProxy.factory(bfoo); bf.foo(); System.out.println(); BusinessBarImpl bbar = new BusinessBarImpl(); BusinessBar bb = (BusinessBar)BusinessImplProxy.factory(bbar); String message = bb.bar("Hello,World"); System.out.println(message); }}
java 動態代理 , 多看看。 多用用。