亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

模式的秘密---代理模式

難度中級
時長 2小時 0分
學習人數
綜合評分9.70
184人評價 查看評價
9.8 內容實用
9.6 簡潔易懂
9.7 邏輯清晰
  • 動態代理
    查看全部
  • 動態代理類的Proxy
    查看全部
  • 動態代理的InvocationHandler接口
    查看全部
  • 兩種代理方式 ,繼承和聚合
    查看全部
  • 靜態代理的概念
    查看全部
  • 常用的代理模式
    查看全部
  • 代理模式分類: 1、遠程代理(Remote Proxy)——為不同地理的對象提供局域網代表對象。(類似于客戶端和服務器端) 2、虛擬代理(Virtual Proxy)——根據需要將資源消耗很大的對象進行延遲,真正需要的時候才進行創建。(網頁中圖片的加載,先用一張虛擬的圖片進行顯示,等圖片加載完成后再進行顯示) 3、保護代理(Protect Proxy)——控制用戶的訪問權限。(發帖功能) 4、智能引用代理(Smart Reference Proxy)——提供對目標對象一些額外的服務。(火車站代售處為火車站代理)
    查看全部
  • 動態代理實現思路
    查看全部
  • //需要編譯的java文件 String filename = System.getProperty("user.dir")+"/bin/com/imooc/proxy/$Proxy0.java"; //編譯 //拿到編譯器 JavaCompiler complier = ToolProvider.getSystemJavaCompiler(); //文件管理者 StandardJavaFileManager fileMgr = complier.getStandardFileManager(null, null, null); //獲取文件 Iterable units = fileMgr.getJavaFileObjects(filename); //編譯任務 CompilationTask t = complier.getTask(null, fileMgr, null, null, null, units); //進行編譯 t.call(); fileMgr.close(); //load 到內存 ClassLoader cl = ClassLoader.getSystemClassLoader(); //從內存中獲取要處理的類 Class c = cl.loadClass("com.imooc.proxy.$Proxy0"); //給此類的構造方法傳入參數 Constructor ctr = c.getConstructor(InvocationHandler.class); //調用對象的方法 return ctr.newInstance(h);
    查看全部
  • proxy
    查看全部
  • jdk動態代理
    查看全部
  • 動態代理實現步驟
    查看全部
  • JDK動態代理可以對任何類,任何方法提供代理,其中智能引用代理最為廣泛使用。 JDK動態代理實現思路: 實現功能:通過Proxy的newProxyInstance方法返回代理對象。 1. 聲明一段源碼(動態產生代理); 2. 編譯源碼(JDK Compiler API),產生新的類(代理類); 3. 將這個類 load 到內存當中,產生一個新的對象(代理對象); 4. return 代理對象。 小技巧:如果(雙引號)字符串里面還有(雙引號)字符串,則里面的字符串(雙引號)需要轉義“\”。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】
    查看全部
    0 采集 收起 來源:課程總結

    2016-08-26

  • JDK自從1.3版本開始,就引入了動態代理,JDK的動態代理用起來非常簡單,但是它有一個限制,就是使用動態代理的對象必須實現一個或多個接口 。如果想代理沒有實現接口的類可以使用CGLIB包。 CGLIB(Code Generation Library)是一個開源項目。是一個強大的,高性能,高質量的Code生成類庫,它可以在運行期擴展Java類與實現Java接口。Hibernate用它來實現PO(Persistent Object 持久化對象)字節碼的動態生成。 注意:CGLIB不能對“final”修飾的類進行代理。 相關代碼——(下): @CglibProxy.java public class CglibProxy implements MethodInterceptor { private Enhancer enhancer=new Enhancer(); public Object getProxy(Class cls){ //設置創建子類的類 enhancer.setSuperclass(cls); enhancer.setCallback(this); return enhancer.create(); } /** * 參數:object:攔截所有目標類方法的調用,method:目標方法的反射對象,args:方法的參數,methodproxy:代理類的實例。 */ public Object intercept(Object object, Method method, Object[] args, MethodProxy methodproxy) throws Throwable { syso("日志開始..."); methodproxy.invokeSuper(object, args); syso("日志結束..."); return null; } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】
    查看全部
  • 相關代碼——(上): @Client.java public class Client { public static void main(String[] args) { CglibProxy proxy=new CglibProxy(); Train t=(Train) proxy.getProxy(Train.class); t.move(); /** * 執行順序(類似JDK動態代理):從proxy.getProxy(Train.class);后,開始先執行CglibProxy類的getProxy()方法, * 再返回到t.move();后,接著執行CglibProxy類的intercept()方法,等到methodproxy.invokeSuper();則執行Train類中的move()方法, * 然后返回到methodproxy.invokeSuper();下一句直到最后,再接著返回到Client類,完畢。 */ } } @Train.java public class Train { public void move(){ System.out.println("火車行駛中..."); } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】
    查看全部

舉報

0/150
提交
取消
課程須知
本課程是 Java 開發課程的高級課程,希望各位小伙伴們在學習本課程之前,了解以下內容: 1)初步具備面向對象的設計思維 2)了解多態概念 3)了解反射
老師告訴你能學到什么?
1、代理模式概念機分類 2、代理模式應用場景 3、掌握靜態代理、動態代理運用 4、理解JDK動態代理實現原理

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!