java有關靜態代理及動態代理的實現

來源:互聯網
上載者:User

標籤: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有關靜態代理及動態代理的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.