<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認證 我要投稿
    • 相關(guān)推薦

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

      動態(tài)代理類是位于Java.lang.reflect包下的Interface InvocationHandler。下面小編準備了關(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行代理

      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)代理對所有的代理類都進行了攔截

      * @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所有方法都進行了攔截,在調(diào)用真正的業(yè)務(wù)類方法之前之后都插入了代碼,這就是JDK的動態(tài)代理。其實SPRING的AOP思想的基本原理也是這個,但是它寫的比較負責,而且比較優(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

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

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

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

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

    主站蜘蛛池模板: 99免费精品国产| 国产高清在线精品一区二区 | 亚洲精品免费视频| 日韩欧精品无码视频无删节 | 精品一区二区三区中文字幕| 无码人妻精品一区二区三区久久久| 国产精品原创巨作?v网站| 国产精品久久久久影院嫩草| 无码精品A∨在线观看中文| 国内精品久久久久久久久| 99热成人精品免费久久| 久久精品国产精品国产精品污 | 国产精品国产三级国产AV主播| 国产三级精品三级在线专区1| 国产亚洲精品拍拍拍拍拍| 久久久91精品国产一区二区三区 | 高清在线国产午夜精品| 99热在线日韩精品免费| 日韩精品无码AV成人观看| 亚洲精品第一国产综合境外资源| 精品日韩在线视频一区二区三区| 精品成人av一区二区三区| 国产精品亚洲精品| 国产精品无码无片在线观看| 亚洲精品~无码抽插| 亚洲欧洲国产精品香蕉网| 亚洲av无码成人精品区| 欧美国产成人久久精品| 精品国产婷婷久久久| 国产精品天干天干在线综合| 国产成人精品在线观看| 在线精品视频播放| 91精品国产91久久久久久青草| 日本欧美韩国日本精品| 国产精品视频网站你懂得| 国产精品成人va| 国产精品视频一区二区三区经| 九九精品在线观看| 欧洲精品视频在线观看| 99RE8这里有精品热视频| 国产av无码专区亚洲国产精品|