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容器获得服务