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方法执行前后要进行的一些逻辑处理。

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

  • 相关阅读:
    Oracle手工增加排序区避免SQL使用临时表空间排序产生物理IO
    Oracle中"TABLE ACCESS FULL"的”欺骗时刻“
    Oracle关于12C新特性InMemory踩坑历程
    Oracle19C关于参数sec_case_sensitive_logon控制密码大小写敏感问题
    友链
    RESTful API
    不自由的自由职业
    惊了!修仙=编程??
    [Git专题] 环境搭建
    Linux系统僵尸进程详解
  • 原文地址:https://www.cnblogs.com/wangxufeng/p/5594274.html
Copyright © 2011-2022 走看看