spring代理模式 service远程调用,插件执行
2016-06-17 15:54
351 查看
最近,研究了一下平台远程调用的过程,和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方法执行前后要进行的一些逻辑处理。
终于理清了思路,记录一下。
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方法执行前后要进行的一些逻辑处理。
终于理清了思路,记录一下。
相关文章推荐
- java中非对称加密(RSA)的使用
- java IO
- springRest+cross跨域支持
- @Query----------------springMVC
- Java对象锁和类锁全面解析(多线程synchronized关键字)
- Linux(Centos、Debian)之安装Java JDK及注意事项(转)
- Java对象锁和类锁全面解析(多线程synchronized关键字)
- Java对象锁和类锁全面解析(多线程synchronized关键字)
- Java对象锁和类锁全面解析(多线程synchronized关键字)
- Java-异常【占坑中】
- 【Android】如何将eclipse工程导入studio
- Java之:JVM内存模型
- ubuntu 安装JDK
- java jfinal + ajaxfileupload.js 上传
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
- java技术论文
- 为什么不在ssh的action层做事务处理
- java技术论文
- java技术论文
- 2016.6.16笔记(1)-多线程(1)