1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. Java動態代理的解析

        時間:2020-10-08 16:14:57 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的方法10-25

        Java腳本動態用法10-26

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

        解析動態NAT配置05-19

        java語言的特性解析06-02

        解析動態NAT配置「實例」05-12

        Java的內存劃分全解析09-01

        Java如何設置代理IP訪問網站12-18

        java命令行參數解析201611-11

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>