欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java反射機制中動態(tài)代理的示例分析

這篇文章主要介紹了Java反射機制中動態(tài)代理的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)主營費縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),費縣h5小程序定制開發(fā)搭建,費縣網(wǎng)站營銷推廣歡迎費縣等地區(qū)企業(yè)咨詢

1. 代理模式

代理模式就是為其他對象提供一種代理來控制對這個對象的訪問。其實代理模式是在訪問的對象時引入一定程度的間接性,這種間接性可以附加多種用途。

它的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會存在關(guān)聯(lián)關(guān)系,一個代理類的對象與一個委托類的對象關(guān)聯(lián),代理類的對象本身并不真正實現(xiàn)服務(wù),而是通過調(diào)用委托類的對象的相關(guān)方法,來提供特定的服務(wù)。

2. 分類

代理類按照創(chuàng)建時期可以分為兩種,靜態(tài)代理類和動態(tài)代理類。

靜態(tài)代理類:由程序員創(chuàng)建或由特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經(jīng)存在了。

動態(tài)代理類:在程序運行時,運用反射機制動態(tài)創(chuàng)建而成。

3. 靜態(tài)代理和動態(tài)代理舉例

靜態(tài)代理:

業(yè)務(wù)接口類:

package com.bjpowernode.pattern;   public interface UserManager {       public void addUser(String userId, String userName);            public void delUser(String userId);            public void modifyUser(String userId, String userName);            public String findUser(String userId);  }

業(yè)務(wù)接口實現(xiàn)類:

package com.bjpowernode.pattern;   public class UserManagerImpl implements UserManager {       public void addUser(String userId, String userName) {          //System.out.println("start-->>addUser() userId-->>" + userId);          try {              System.out.println("UserManagerImpl.addUser() userId-->>" + userId);                            //System.out.println("success-->>addUser()");          }catch(Exception e) {              e.printStackTrace();              //System.out.println("error-->>addUser()");              throw new RuntimeException();          }         }       public void delUser(String userId) {          System.out.println("UserManagerImpl.delUser() userId-->>" + userId);      }       public String findUser(String userId) {          System.out.println("UserManagerImpl.findUser() userId-->>" + userId);          return "張三";      }       public void modifyUser(String userId, String userName) {          System.out.println("UserManagerImpl.modifyUser() userId-->>" + userId);      }   }

業(yè)務(wù)代理類:

package com.bjpowernode.pattern;   public class UserManagerImplProxy implements UserManager {       private UserManager userManager;            public UserManagerImplProxy(UserManager userManager) {          this.userManager = userManager;      }            public void addUser(String userId, String userName) {          try {              System.out.println("start-->>addUser() userId-->>" + userId);              userManager.addUser(userId, userName);              System.out.println("success-->>addUser()");          }catch(Exception e) {              e.printStackTrace();              System.out.println("error-->>addUser()");          }         }       public void delUser(String userId) {       }       public String findUser(String userId) {          return null;      }       public void modifyUser(String userId, String userName) {       }  }

客戶端類:

package com.bjpowernode.pattern;   public class Client {       /**       * @param args       */     public static void main(String[] args) {          //UserManager userManager = new UserManagerImpl();          UserManager userManager = new UserManagerImplProxy(new UserManagerImpl());          userManager.addUser("0001", "張三");      }   }

運行結(jié)果:

start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()

動態(tài)代理:

業(yè)務(wù)接口類:

package com.bjpowernode.pattern;   public interface UserManager {             public String test(String userId);  }

業(yè)務(wù)接口實現(xiàn)類:

package com.bjpowernode.pattern;   public class UserManagerImpl implements UserManager {       public String test(String userId) {          System.out.println("UserManagerImpl.findUser() userId-->>" + userId);          return "張三";      }   }

BusinessHandler類:

package com.bjpowernode.pattern;   import java.lang.reflect.InvocationHandler;  import java.lang.reflect.Method;  import java.lang.reflect.Proxy;   public class BusinessHandler implements InvocationHandler {            private Object targetObject;            public Object newProxyInstance(Object targetObject) {                    this.targetObject = targetObject;          return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),                                 targetObject.getClass().getInterfaces(), this);      }            public Object invoke(Object proxy, Method method, Object[] args)              throws Throwable {          System.out.println("start-->>" + method.getName());          for (int i=0; i<args.length; i++) {              System.out.println(args[i]);          }          Object ret = null;          try {              //調(diào)用目標(biāo)方法              ret = method.invoke(targetObject, args);              System.out.println("success-->>" + method.getName());           }catch(Exception e) {              e.printStackTrace();              System.out.println("error-->>" + method.getName());              throw e;          }          return ret;      }   }

客戶端類:

package com.bjpowernode.pattern;   import java.lang.reflect.Field;    public class Client {       /**       * @param args       */     public static void main(String[] args) {                    BusinessHandler businessHandler = new BusinessHandler();          UserManager userManager = (UserManager)businessHandler.newProxyInstance(new UserManagerImpl());                                        //userManager.addUser("0001", "張三");          //userManager.delUser("0001");         // System.out.println(userManager.getClass().getName());                    String name = userManager.test("0001");      //String name = ((UserManagerImpl) logHandler.newProxyInstance(new UserManagerImpl())).test("0001");          System.out.println("Client.main() --- " + name);      }   }

運行結(jié)果:

start-->>test  0001 UserManagerImpl.findUser() userId-->>0001 success-->>test  Client.main() --- 張三

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java反射機制中動態(tài)代理的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

文章題目:Java反射機制中動態(tài)代理的示例分析
文章地址:http://chinadenli.net/article28/jeipcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計ChatGPT、虛擬主機、面包屑導(dǎo)航、定制開發(fā)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
亚洲国产精品无遮挡羞羞| 日韩欧美国产高清在线| 国产免费无遮挡精品视频| 中国黄色色片色哟哟哟哟哟哟| 国产成人在线一区二区三区| 欧美精品亚洲精品日韩专区| 国产精品日本女优在线观看| 国产av精品一区二区| 色婷婷久久五月中文字幕| 中文字字幕在线中文乱码二区 | 91精品国产综合久久不卡| 欧美尤物在线观看西比尔| 日本女优一色一伦一区二区三区| 久久偷拍视频免费观看| 色婷婷在线视频免费播放| 国产不卡最新在线视频| 亚洲精品中文字幕熟女| 成人免费视频免费观看| 日本精品中文字幕在线视频| 亚洲伦理中文字幕在线观看 | 麻豆果冻传媒一二三区| 五月天丁香婷婷一区二区| 美女露小粉嫩91精品久久久| 青青久久亚洲婷婷中文网| 亚洲一区二区三区三州| 观看日韩精品在线视频| 国产一区二区不卡在线播放| 午夜精品国产一区在线观看| 日本欧美一区二区三区就| 又大又长又粗又猛国产精品| 中文字幕人妻综合一区二区| av一区二区三区天堂| 日韩不卡一区二区在线| 亚洲中文字幕视频在线观看| 欧美日韩国产免费看黄片| 色一欲一性一乱—区二区三区| 丰满少妇被猛烈插入在线观看| 99精品国产一区二区青青 | 久久精品伊人一区二区| 中国少妇精品偷拍视频 | 精品欧美国产一二三区|