摘要:動態代理模式動態代理模式是一種第三方的動態代理模式,我們在使用這個代理模式的時候,需要導入三方包如下動態代理模式不需要想動態代理模式那樣使用接口,一個非抽象類就可以,但是前提是這個非抽象類需要實現接口,并重寫方法。
CGLIB動態代理模式
CGLIB動態代理模式 是一種第三方的動態代理模式,我們在使用這個代理模式的時候,需要導入三方jar包,如下:
asm-2.2.3.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
cglib-nodep-2.1_3.jar
CGLIB動態代理模式不需要想JDK動態代理模式那樣使用接口,一個非抽象類就可以,但是前提是這個非抽象類需要實現MethodInterceptor接口,并重寫intercept方法。我們通過代碼來了解其實現原理。
//創建一個普通類 public class SayHello { public void say(String name) { System.out.println("您好," + name); } }
//CGLIB動態代理類 public class CglibProxy implements MethodInterceptor { /** * 生成CGLIB代理對象 * @param cls -Class類 需要被代理的真實對象 * @return */ public Object getProxy(Class cls) { //1.CGLIB enhancer增強類對象 Enhancer en = new Enhancer(); //2.設置增強類型 en.setSuperclass(cls); //3.定義代理邏輯對象為當前對象,要求當前對象實現 MethodInterceptor 接口 en.setCallback(this); //生成代理對象并返回 Object proxy = en.create(); return proxy; } /** * 代理邏輯方法 * 1.proxy 代理對象 * 2.method 方法 * 3.args 方法參數 * 4.methodProxy 方法代理 */ @Override public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("調用代理對象之前的邏輯~"); Object result = methodProxy.invokeSuper(proxy, args); System.out.println("調用代理對象之后的邏輯~"); return result; } }
//測試代碼 public class TestCglibProxy { public static void main(String[] args) { CglibProxy cglib = new CglibProxy(); SayHello proxy = (SayHello) cglib.getProxy(SayHello.class); proxy.say("James"); } }結果展示
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69601.html
摘要:代理模式代理模式通俗一點的解釋就是在操作一個對象和對象中的方法時,不是直接操作這個對象,還是通過一個代理對象來操作這個實際的目標對象。 代理模式: 代理模式通俗一點的解釋就是在操作一個對象和對象中的方法時,不是直接操作這個對象,還是通過一個代理對象來操作這個實際的目標對象。應用場景一般是需要在執行某個已經寫好的方法前后再添加一段邏輯,比如執行方法前打印日志,或者在執行方法之前和之后打時...
摘要:與靜態代理對比,動態代理是在動態生成代理類,由代理類完成對具體方法的封裝,實現的功能。本文將分析中兩種動態代理的實現方式,和,比較它們的異同。那如何動態編譯呢你可以使用,這是一個封裝了的庫,幫助你方便地實現動態編譯源代碼。 發現Java面試很喜歡問Spring AOP怎么實現的之類的問題,所以寫一篇文章來整理一下。關于AOP和代理模式的概念這里并不做贅述,而是直奔主題,即AOP的實現方...
摘要:除了和外,我們還有最后一招我直接把一個代理類的源代碼用字符串拼出來,然后基于這個字符串調用的編譯期,動態的創建一個新的文件,然后動態編譯這個文件,這樣也能得到一個新的代理類。 面試問題:Java里的代理設計模式(Proxy Design Pattern)一共有幾種實現方式?這個題目很像孔乙己問茴香豆的茴字有哪幾種寫法? showImg(https://segmentfault.com/...
摘要:代理模式的實現靜態代理優缺點優點只對對需要的方法加代理邏輯。通過繼承的方式進行代理,無論目標對象有沒有實現接口都可以代理,但是無法處理的情況。 注意:本文所有的class使用的static修飾主要是為了能在一個類里面測試。實際項目中不應該這樣做的,應該分包分class。文字描述不是很多,還是看代碼比較好理解吧... 1. Java代理的理解 代理模式是一種設計模式,簡單說即是在不改變源...
閱讀 2508·2021-10-11 10:59
閱讀 2700·2021-09-22 15:49
閱讀 2637·2021-08-13 13:25
閱讀 1285·2019-08-30 13:14
閱讀 2386·2019-08-29 18:45
閱讀 2990·2019-08-29 18:36
閱讀 1482·2019-08-29 13:21
閱讀 1157·2019-08-26 11:44