日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

03、动态代理--CGLib引入增强

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 03、动态代理--CGLib引入增强 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.offer.note.Java基礎.動態代理.CGLib引入增強;public interface Browser {void visitInternet(); }

?

package com.offer.note.Java基礎.動態代理.CGLib引入增強;/*** 目標類:被代理類** @author: xueguanfeng* @date: 2018-05-15 09:57*/ public class ChromeBrowser implements Browser {@Overridepublic void visitInternet() {System.out.println("visit YouTube");}//非接口方法public void listenToMusic() {System.out.println("listen to Cranberries");} }

?

package com.offer.note.Java基礎.動態代理.CGLib引入增強;import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** CGLib引入增強** @author: xueguanfeng* @date: 2018-05-15 13:08*/ public class CglibIntroductionBrowserProxy implements MethodInterceptor, Game {private static CglibIntroductionBrowserProxy proxy = new CglibIntroductionBrowserProxy();private CglibIntroductionBrowserProxy() {}public static CglibIntroductionBrowserProxy getInstance() {return proxy;}public <T> T getProxy(Class<T> clazz) {//第二個入參:指定產生的代理類實現的接口,指定的接口中的方法,需要通過反射來調用,不能通過CGLib來觸發調用return (T) Enhancer.create(clazz, new Class[]{Game.class}, this);}@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {Object retVal;//判斷執行方法是否為指定代理類實現的接口中的方法,如果是,則通過“反射”調用接口的實現類。if (method.getDeclaringClass().isInterface()) {method.setAccessible(true);System.out.println("=================通過反射調用目標方法===================");encrypt();retVal = method.invoke(this, args);decrypt();//如果不是,則通過CGLib來觸發。} else {System.out.println("=================CGLib觸發目標方法調用===================");encrypt();retVal = proxy.invokeSuper(obj, args);decrypt();}return retVal;}@Overridepublic void start() {System.out.println("start a game");}增強////*** 加密*/private void encrypt() {System.out.println("encrypt ...");}/*** 解密*/private void decrypt() {System.out.println("decrypt ...");}}

?

package com.offer.note.Java基礎.動態代理.CGLib引入增強;/*** 測試類** @author: xueguanfeng* @date: 2018-05-15 13:10*/ public class CglibIntroductionDynamicProxyTest {public static void main(String[] args) {//動態生成的代理類的實例ChromeBrowser browser = CglibIntroductionBrowserProxy.getInstance().getProxy(ChromeBrowser.class);browser.visitInternet();browser.listenToMusic();//動態生成的代理類實現了Game接口(return (T) Enhancer.create(clazz, new Class[]{Game.class}, this);)Game game = (Game) browser;game.start();} }

?

轉載于:https://www.cnblogs.com/xueguanfeng/p/9042377.html

總結

以上是生活随笔為你收集整理的03、动态代理--CGLib引入增强的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。