之前介紹的反射和注解都是Java中的動態(tài)特性,還有即將介紹的動態(tài)代理也是Java中的一個動態(tài)特性。這些動態(tài)特性使得我們的程序很靈活。動態(tài)代理是面向AOP編程的基礎。通過動態(tài)代理,我們可以在運行時動態(tài)創(chuàng)建一個類,實現某些接口中的方法,目前為止該特性已被廣泛應用于各種框架和類庫中,例如:Spring,Hibernate,MyBatis等。理解動態(tài)代理是理解框架底層的基礎。
     主要內容如下:

  • 理解代理是何意

  • Java SDK實現動態(tài)代理

  • 第三方庫cglib實現動態(tài)代理

一、代理的概念
     單從字面上理解,代理就是指原對象的委托人,它不是原對象但是卻有原對象的權限。Java中的代理意思類似,就是指通過代理來操作原對象的方法和屬性,而原對象不直接出現。這樣做有幾點好處:

  • 節(jié)省創(chuàng)建原對象的高開銷,創(chuàng)建一個代理并不會立馬創(chuàng)建一個實際原對象,而是保存一個原對象的地址,按需加載

  • 執(zhí)行權限檢查,保護原對象

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓

實際上代理堵在了原對象的前面,在代理的內部往往還是調用了原對象的方法,只是它還做了其他的一些操作。下面看第一種實現動態(tài)代理的方式。

二、Java SDK實現動態(tài)代理
     實現動態(tài)代理主要有如下幾個步驟:

  • 實現 InvocationHandler接口,完成自定義調用處理器

  • 通過Proxy的getProxyClass方法獲取對應的代理類

  • 利用反射技術獲取該代理類的constructor構造器

  • 利用constructor構造代理實例對象

網友評論