jdk动态代理

先说什么是静态代理

    不是正常方法,利用class的getName和getMethod方法,然后invoke,有了classname一切好办

 

 

   invoke是真正execute的,然后是static可以放null,是instance要放对象。

jdk动态代理

  承包了接口全部的代理,写好代理类,接口全部被安排

  如果代理每个方法都要写相同的业务,那可以考虑动态代理

  比如这个分布式框架是没有实现类的,通过代理,每个方法其实转发到一个Http client的请求(甚至不用使用invoke)

  1,新创建代理有3个条件,1,类加载器(不用理),2,代理的接口,3,代理类

 

 

 

 

 

 

 这里是 接口作为类加载器,new Class[]{ mapperInterface}作为被代理的接口,在传入router帮忙写hander

远程调用的时候,通常已经知道方法名字了,为了防止重载,也把参数类型parameter传过去,

 

method.getParameterTypes();//获得参数类型
 method.getName()//获得方法名字
method.getReturnType();//获得返回类型

Integer flag = userBiz.saveUser(saveUserDto);

因为有接口,和接口上的DTO,我们已经知道方法名字,参数parameter,和返回类型,必须web和platform都有这个数据类型,才能根据class反射

如果信息不够,比如要类名,可以尝试来个field

 

 所以设计好的

url:类名+方法名字

数据格式是:

 

 在platform这边,我们相当于写一个mvc,解析他的调用

用springbean获取bean调用,或者反射调用

 //根据方法名字和参数(重载)获得方法
        Method method = clazz.getMethod(methodName, methodParam);

 顺便说spring的拦截,这里是两个拦截

 这算一个远程调用框架的内容,

那和springmvc相比,有什么不一样

springmvc流程:https://www.cnblogs.com/vhyc/p/9104852.html

springmvc是根据url解析的,然后在他自己匹配handlder,上面还有一些aop的内容,类:interceptor上prehandler,posthandler

我们这个是根据body上面服务名字,再到spring容器获得服务

posted on 2019-03-02 14:17  Kooing  阅读(102)  评论(0编辑  收藏  举报

导航