標籤:consumer exce 代理 some nts 商務邏輯 處理 cat 對象
public interface MyInterface { void doSomeThing(); void someThingElse(String param);}
public class RealObject implements MyInterface{ @Override public void doSomeThing() { // TODO Auto-generated method stub print("開始調用doSomeThing方法"); } @Override public void someThingElse(String param) { // TODO Auto-generated method stub print("開始調用somethingelse 方法;參數"+param); }}
public class SimpleProxy implements MyInterface{ private MyInterface myInterface; public SimpleProxy(MyInterface myInterface) { this.myInterface=myInterface; } @Override public void doSomeThing() { // TODO Auto-generated method stub print("商務邏輯dosomething..."); myInterface.doSomeThing(); } @Override public void someThingElse(String param) { // TODO Auto-generated method stub print("商務邏輯ELse..."); myInterface.someThingElse(param); } public static void consumer(MyInterface myInterface) { myInterface.doSomeThing(); myInterface.someThingElse("bubu.."); } public static void main(String[] args) { consumer(new RealObject()); consumer(new SimpleProxy(new RealObject())); }}
以下是動態代理
自訂一個調用處理器:
/** * 調用處理器<P>* 動態代理能把所有調用都重新導向到調用處理器上*/public class DynamicProxyHandle implements InvocationHandler{ private Object proxied; public DynamicProxyHandle(Object object) { this.proxied=object; } @Override public Object invoke(Object proxy,Method method,Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { print("proxy class:"+proxy.getClass()+" method:"+method+" args:"+args); if(method.getName().equals("doSomeThing")) { print("代理檢測到doSomeThing被調用"); }// if(args!=null) {// for(Object object:args) {// print("====="+object);// }// } return method.invoke(proxied, args); }}
public class SimpleDynamicProxy { public static void consumer(MyInterface myInterface) { myInterface.doSomeThing(); myInterface.someThingElse("bubu.."); } public static void main(String[] args) { RealObject realObject = new RealObject(); consumer(realObject); print("-----------------------------------------"); /** * 1.一個類載入器【你通常可以從已經被載入的類對象中擷取得到其類載入器,然後傳遞給它】 * 2.希望該代理實現的介面列表【不是類或抽象類別】 * 3.以及InvocationHandler的一個實現(一個調用處理器) */ MyInterface dynamicProxy = (MyInterface) Proxy.newProxyInstance(MyInterface.class.getClassLoader(), new Class[]{MyInterface.class}, new DynamicProxyHandle(realObject)); consumer(dynamicProxy); }}
java有關靜態代理及動態代理的實現