亚洲一级电影在线观看,九九精品无码专区免费,亚洲AV无码资源在线观看 ,欧美国产高清

Java動態代理的解析

時間:2024-09-28 05:12:53 JAVA認證 我要投稿
  • 相關推薦

關于Java動態代理的解析

  動態代理類是位于Java.lang.reflect包下的Interface InvocationHandler。下面小編準備了關于Java動態代理的解析,提供給大家參考!

  眾所周知,JDK的動態代理模式必須實現接口。

  以下面的源碼為例:

  接口一:

  public interface ActionInterface {

  void doSelf(String str);

  String getType();

  }

  接口二:

  public interface InterruupIntf {

  void interrup();

  }

  實現類:

  public class MyselfImpl implements ActionInterface, InterruupIntf {

  public String getType() {

  String type = "公用部門";

  System.out.println(type);

  return type;

  }

  public void doSelf(String str) {

  System.out.println("業務實現類: " + str + " !");

  }

  public void interrup() {

  System.out.println("發呆三分鐘!");

  }

  }

  動態代理需要反射,

  * 必須要實現InvocationHandler接口

  * 能夠對所有的方法進行代理

  public class MyInvocationHandler implements InvocationHandler {

  private Object obj;

  /**

  * 通過構造方法來設置被代理的對象

  * @param obj

  */

  public MyInvocationHandler(Object obj) {

  this.obj = obj;

  }

  /**

  * 動態代理需要反射

  *

  */

  public Object invoke(Object proxy, Method method, Object[] args)

  throws Throwable {

  System.out.println("+++++++++++調用業務方法之前做其他事情");

  Object returnObject = method.invoke(obj, args);

  System.out.println("+++++++++++調用業務方法之前做其他事情");

  return returnObject;

  }

  /**

  * 測試函數

  * 動態代理對所有的代理類都進行了攔截

  * @throws NoSuchMethodException

  * @throws InvocationTargetException

  * @throws IllegalAccessException

  * @throws InstantiationException

  * @throws SecurityException

  * @throws IllegalArgumentException

  */

  public static void main(String[] args) throws InterruptedException,

  IllegalArgumentException, SecurityException,

  InstantiationException, IllegalAccessException,

  InvocationTargetException, NoSuchMethodException {

  //實現業務邏輯的類

  MyselfImpl muSelf = new MyselfImpl();

  //JDK創建的動態邏輯類,調用上面的構造函數注入

  MyInvocationHandler myInvocation = new MyInvocationHandler(muSelf);

  /*

  Class proxyClass = Proxy.getProxyClass(

  MyselfImpl.class.getClassLoader(), MyselfImpl.class.getInterfaces());

  //建業務邏輯類的動態代理類

  Object proxy = proxyClass.getConstructor(

  new Class[] { InvocationHandler.class }).newInstance(

  new MyInvocationHandler(new MyselfImpl())); */

  //建業務邏輯類的動態代理類

  Object proxy = Proxy.newProxyInstance(MyselfImpl.class.getClassLoader(), MyselfImpl.class.getInterfaces(), myInvocation);

  //業務類自己調用運行代理對象

  ActionInterface testIntf = (ActionInterface) proxy;

  testIntf.doSelf("我要做業務了!");

  testIntf.getType();

  InterruupIntf intIntf = (InterruupIntf) proxy;

  intIntf.interrup();

  }

  }

  運行最后一個類的MAIN函數,控制臺輸出結果如下:

  +++++++++++調用業務方法之前做其他事情

  業務實現類: 我要做業務了! !

  +++++++++++調用業務方法之前做其他事情

  +++++++++++調用業務方法之前做其他事情

  公用部門

  +++++++++++調用業務方法之前做其他事情

  +++++++++++調用業務方法之前做其他事情

  發呆三分鐘!

  +++++++++++調用業務方法之前做其他事情

  看到結果了。

  JDK的動態代理,對MyselfImpl所有方法都進行了攔截,在調用真正的業務類方法之前之后都插入了代碼,這就是JDK的動態代理。其實SPRING的AOP思想的基本原理也是這個,但是它寫的比較負責,而且比較優秀。

【Java動態代理的解析】相關文章:

Java動態代理實現AOP的方法07-22

Java腳本動態用法06-11

解析動態NAT配置09-24

Java中的動態代碼編程06-27

Java的內存劃分全解析08-02

java命令行參數解析201608-12

計算機二級JAVA考點解析10-12

關于計算機二級JAVA考點解析07-14

Java與Java web的區別08-10

2017年計算機二級JAVA考點解析08-03

主站蜘蛛池模板: 国产综合久久久久| 国产99视频精品免视看9| 国产精彩亚洲中文在线| 性欧美视频videos6一9| 国产精品国产亚洲区艳妇糸列短篇| ,丰满少妇A级毛片| 中文人妻熟女乱又乱精品 | 欧美午夜久久| AV在线麻免费观看网站| 国产亚洲另类无码专区| 韩国 日本 亚洲 国产 不卡| 日韩在线 | 中文| 国产9色在线 | 日韩| 久久www免费人成—看片| 久久久无码人妻精品无码| 亚洲精品suv精品一区二区| 成年女人爽到高潮喷视频| 国产免费久久精品99久久| 国产高清-国产av| 亚洲国产精品一区二区第一页| 天堂av无码大芭蕉伊人av孕妇| 午夜在线欧美蜜桃| 日韩中文字幕v亚洲中文字幕 | 国产亚洲精品久久久久婷婷图片| 欧洲精品无码一区二区三区在线播放| 97无码视频在线看视频| 国产福利片无码区在线观看| 亚洲另类无码专区国内精品| 亚洲午夜久久久久久噜噜噜 | 理论片午午伦夜理片久久| 内射极品少妇xxxxxhd| 国产精品区网红主播在线观看| 日韩无码精品人妻| 亚洲国产欧美在线综合| 五月丁香六月激情综合在线视频| 久久久久日本精品人妻aⅴ毛片| 欧洲-级毛片内射| 久久大香国产成人av| 亚洲美女午夜福利视频导航| 国产精品美女久久久m| 国产在线欧美一区二区|