zoukankan      html  css  js  c++  java
  • spring代理模式 service远程调用,插件执行

      最近,研究了一下平台远程调用的过程,和service层插件执行的原理,记录一下。

      1、远程service调用过程

      首先看一下类的继承结构

    封装调用处理过程

    封装service调用接口

    封装service请求信息

    封装请求信息处理类

     先描述一个调用过程:

      平台在controller里面获取service的时候都是通过lookup方式(就是用了spring查找service的bean对象的代理对象),远程的service配到配置文件里面,所以在lookup的时候,如果配置文件中有的service,返回代理对象的时候,InvocationHandler其实是子类RemoteInvocationHandler,如果是本地service,那InvocationHandler其实是子类LocalInvocationHandler.

      service执行相关方法的时候,调用的是AbstractInvocationHandler的invoke方法,这个方法做什么呢?这个方法封装ServiceRequest对象,如果是远程service,其实就是RemoteServiceRequest,本地service的话是LocalServiceRequest对象,然后调用ServiceInvoker的invokeService方法,参数就是ServiceRequest对象。

      ServiceInvoker的invokeService方法做什么呢?这个方法里面调用AbstractServiceRequestHandler的handleReuqest方法,参数为ServiceRequest对象。根据ServiceRequest对象就能知道是否为远程请求,若是,AbstractServiceRequestHandler实例其实指向的是RemoteServiceRequestHandler对象。

     2、service层插件执行

      这个其实就是在上面所述的AbstractServiceRequestHandler的handleReuqest方法中,找到方法执行前的插件,方法执行后的插件,都执行了一遍。插件就是在service方法执行前后要进行的一些逻辑处理。

    终于理清了思路,记录一下。

  • 相关阅读:
    Python单元测试unittest加载方式之二:加载测试套件
    Python单元测试unittest加载方式之二:加载测试套件
    Python单元测试unittest加载方式之一:unittestmain()启动单元测试模块
    和优秀的人相处
    耐心和恒心
    ubuntu下FTP文件目录共享
    一个不错的编译调试方法
    qt 程序异常崩溃
    minigui SetTimer(hwnd, id, speed)
    minigui 按钮点击弹窗外部 弹窗消失功能 WS_EX_TRANSPARENT
  • 原文地址:https://www.cnblogs.com/wangxufeng/p/5594274.html
Copyright © 2011-2022 走看看