<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Java動態(tài)代理的解析

    時間:2024-09-28 05:12:53 JAVA認(rèn)證 我要投稿
    • 相關(guān)推薦

    關(guān)于Java動態(tài)代理的解析

      動態(tài)代理類是位于Java.lang.reflect包下的Interface InvocationHandler。下面小編準(zhǔn)備了關(guān)于Java動態(tài)代理的解析,提供給大家參考!

      眾所周知,JDK的動態(tài)代理模式必須實現(xiàn)接口。

      以下面的源碼為例:

      接口一:

      public interface ActionInterface {

      void doSelf(String str);

      String getType();

      }

      接口二:

      public interface InterruupIntf {

      void interrup();

      }

      實現(xiàn)類:

      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("業(yè)務(wù)實現(xiàn)類: " + str + " !");

      }

      public void interrup() {

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

      }

      }

      動態(tài)代理需要反射,

      * 必須要實現(xiàn)InvocationHandler接口

      * 能夠?qū)λ械姆椒ㄟM(jìn)行代理

      public class MyInvocationHandler implements InvocationHandler {

      private Object obj;

      /**

      * 通過構(gòu)造方法來設(shè)置被代理的對象

      * @param obj

      */

      public MyInvocationHandler(Object obj) {

      this.obj = obj;

      }

      /**

      * 動態(tài)代理需要反射

      *

      */

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

      throws Throwable {

      System.out.println("+++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情");

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

      System.out.println("+++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情");

      return returnObject;

      }

      /**

      * 測試函數(shù)

      * 動態(tài)代理對所有的代理類都進(jìn)行了攔截

      * @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 {

      //實現(xiàn)業(yè)務(wù)邏輯的類

      MyselfImpl muSelf = new MyselfImpl();

      //JDK創(chuàng)建的動態(tài)邏輯類,調(diào)用上面的構(gòu)造函數(shù)注入

      MyInvocationHandler myInvocation = new MyInvocationHandler(muSelf);

      /*

      Class proxyClass = Proxy.getProxyClass(

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

      //建業(yè)務(wù)邏輯類的動態(tài)代理類

      Object proxy = proxyClass.getConstructor(

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

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

      //建業(yè)務(wù)邏輯類的動態(tài)代理類

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

      //業(yè)務(wù)類自己調(diào)用運行代理對象

      ActionInterface testIntf = (ActionInterface) proxy;

      testIntf.doSelf("我要做業(yè)務(wù)了!");

      testIntf.getType();

      InterruupIntf intIntf = (InterruupIntf) proxy;

      intIntf.interrup();

      }

      }

      運行最后一個類的MAIN函數(shù),控制臺輸出結(jié)果如下:

      +++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情

      業(yè)務(wù)實現(xiàn)類: 我要做業(yè)務(wù)了! !

      +++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情

      +++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情

      公用部門

      +++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情

      +++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情

      發(fā)呆三分鐘!

      +++++++++++調(diào)用業(yè)務(wù)方法之前做其他事情

      看到結(jié)果了。

      JDK的動態(tài)代理,對MyselfImpl所有方法都進(jìn)行了攔截,在調(diào)用真正的業(yè)務(wù)類方法之前之后都插入了代碼,這就是JDK的動態(tài)代理。其實SPRING的AOP思想的基本原理也是這個,但是它寫的比較負(fù)責(zé),而且比較優(yōu)秀。

    【Java動態(tài)代理的解析】相關(guān)文章:

    Java動態(tài)代理實現(xiàn)AOP的方法07-22

    Java腳本動態(tài)用法06-11

    解析動態(tài)NAT配置09-24

    Java中的動態(tài)代碼編程06-27

    Java的內(nèi)存劃分全解析08-02

    java命令行參數(shù)解析201608-12

    計算機(jī)二級JAVA考點解析10-12

    關(guān)于計算機(jī)二級JAVA考點解析07-14

    Java與Java web的區(qū)別08-10

    2017年計算機(jī)二級JAVA考點解析08-03

    主站蜘蛛池模板: www国产精品| 日本五区在线不卡精品| 国产精品久久自在自线观看| 国产成人精品久久一区二区三区av| 欧美精品播放| 99久久99这里只有免费的精品| 国产精品无码久久四虎| 日韩精品成人亚洲专区| 97在线精品视频| 亚洲精品线路一在线观看| 99久久精品免费看国产免费| 国产精品天干天干综合网| 亚洲国产成人精品女人久久久 | 久久久久一级精品亚洲国产成人综合AV区 | 人妻少妇精品久久| 国产999精品久久久久久| 久久777国产线看观看精品| 国产伦精品一区二区三区| 无码人妻精品一区二区三区在线 | 成人久久精品一区二区三区| 久久精品国产清高在天天线| 最新精品国偷自产在线| 午夜一级日韩精品制服诱惑我们这边| 国产精品永久久久久久久久久| 99久久免费只有精品国产| 一级香蕉精品视频在线播放| 日韩欧国产精品一区综合无码| 华人在线精品免费观看| 91麻豆精品视频在线观看| 91麻豆精品国产| 久久精品国产精品亚洲精品| 99久久人妻无码精品系列蜜桃| 国产办公室秘书无码精品99| 国产成人精品午夜福利| 大桥未久在线精品视频在线| 99在线热播精品免费99热| 久久国产精品久久国产精品| 2022国产精品最新在线| 国产精品片在线观看手机版| 精品人妻少妇一区二区三区不卡| 精品久久久久久久久久久久久久久|