java基礎—-動態代理!

來源:互聯網
上載者:User

代理模式:

1.代理模式角色:

   1) 被代理者。

   2) 代理者。繼承同一個父介面。

2.代理的作用:

  1) 為已經存在一的多個具有相同的介面的目標順的方法增加一些相同的功能。

  2) 代理類是使用反射在JVM運行時動態產生的,所以其使用有很好的靈活性,可以在任何商務邏輯之前和之後加入自己想加入的代碼。

3.代理的原理:

4.jdk中動態代理實現

  java的動態代理要求去實現一個InvocationHandlerv介面。而在它的實作類別中只要去實現一個方法。

public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {start();Object o = method.invoke(obj,args);end();return o;}

   第一個參數proxy,表示代理類,第二個方法則是表示,被代理類的需要調用的方法。每三個參數被調用的方法中傳入的參數。

  然後通過Method中的invoke(obj,args)去反射調用方法。

 在這個方法之前就可以去增加各種功能。從而實現動態代理功能。

 

5.動態代理的建立:

  1)直接通過Prxoy執行個體化:

Person person = new Person();MyProxy myProxy = new MyProxy(person);Human personProxy = (Human) Proxy.newProxyInstance(Person.class.getClassLoader(), Person.class.getInterfaces(),myProxy);// 以下代碼則會報錯。// Person personProxy =// (Person)Proxy.newProxyInstance(Person.class.getClassLoader(),Person.class.getInterfaces(),// myProxy);personProxy.save();

   直接通過Proxy的執行個體化得到代理對象 ,然後調用方法。

2)通過獲得代理類的位元組碼,然後得到構造方法,傳入InvocationHandlerv.class獲得代理類。實現動態代理。

Person person = new Person();MyProxy myProxy = new MyProxy(person);Class<?> clazzProxy = Proxy.getProxyClass(Person.class.getClassLoader(), Person.class.getInterfaces());Constructor<?> constructor = clazzProxy.getConstructor(InvocationHandler.class);//Constructor<?> constructor = clazzProxy.getConstructor(MyProxy.class);//必須要用InvocationHandler用它的實作類別是不可以的!Human personPrxoy = (Human)constructor.newInstance(myProxy);personPrxoy.save();

 

 

----------------------
android培訓、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.