当前位置: 首页 > news >正文

公司内网站建设做商城网站需要什么条件

公司内网站建设,做商城网站需要什么条件,百度做网站的,有寓意的logo设计图片RPC远程调用 使用 RPC 时#xff0c;一般的做法是先找服务提供方要接口#xff0c;通过 Maven把接口依赖到项目中。在编写业务逻辑的时候#xff0c;如果要调用提供方的接口#xff0c;只需要通过依赖注入的方式把接口注入到项目中#xff0c;然后在代码里面直接调用接口…RPC远程调用 使用 RPC 时一般的做法是先找服务提供方要接口通过 Maven把接口依赖到项目中。在编写业务逻辑的时候如果要调用提供方的接口只需要通过依赖注入的方式把接口注入到项目中然后在代码里面直接调用接口的方法 。 接口里并不会包含真实的业务逻辑业务逻辑都在服务提供方。 核心技术动态代理。 RPC 会自动给接口生成一个代理类项目中注入接口的时候运行过程中实际绑定的是这个接口生成的代理类。在接口方法被调用的时候实际上是被生成代理类拦截到这样就可以在生成的代理类里面加入远程调用逻辑。 流程如下 实现原理 jdk动态代理 /*** 要代理的接口*/ public interface Hello {String say(); }/*** 真实调用对象*/ public class RealHello {public String haha(){return im proxy;} }代理类实现InvocationHandler接口 /*** JDK代理类生成*/ public class JDKProxy implements InvocationHandler {private Object target;JDKProxy(Object target) {this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] paramValues) {return ((RealHello)target).haha();} }public class TestProxy {public static void main(String[] args){// 构建代理器JDKProxy proxy new JDKProxy(new RealHello());ClassLoader classLoader Hello.class.getClassLoader();// 把生成的代理类保存到文件 System.setProperty(sun.misc.ProxyGenerator.saveGeneratedFiles,true);// 生成代理类Hello test (Hello) Proxy.newProxyInstance(classLoader, new Class[]{Hello.class}, proxy);// 方法调用System.out.println(test.say());} }解释给 Hello 接口生成一个动态代理类并调用接口 say() 方法但真实返回的值是来自 RealHello 里面的 haha() 方法返回值。 重点是代理类的生成Proxy.newProxyInstance。 参数 saveGeneratedFiles 来控制是否把生成的字节码保存到本地磁盘。 key为“sun.misc.ProxyGenerator.saveGeneratedFiles”的Property来控制的动态生成的类会保存在工程根目录下的 com/sun/proxy 目录里面。 生成的代理类。 package com.sun.proxy;import com.lkl.proxy.Hello; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.UndeclaredThrowableException;public final class $Proxy0 extends Proxy implements Hello {private static Method m1;private static Method m2;private static Method m3;private static Method m0;public $Proxy0(InvocationHandler var1) throws {super(var1);}public final boolean equals(Object var1) throws {try {return (Boolean)super.h.invoke(this, m1, new Object[]{var1});} catch (RuntimeException | Error var3) {throw var3;} catch (Throwable var4) {throw new UndeclaredThrowableException(var4);}}public final String toString() throws {try {return (String)super.h.invoke(this, m2, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final String say() throws {try {// 代理类执行return (String)super.h.invoke(this, m3, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final int hashCode() throws {try {return (Integer)super.h.invoke(this, m0, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}static {try {m1 Class.forName(java.lang.Object).getMethod(equals, Class.forName(java.lang.Object));m2 Class.forName(java.lang.Object).getMethod(toString);m3 Class.forName(com.lkl.proxy.Hello).getMethod(say);m0 Class.forName(java.lang.Object).getMethod(hashCode);} catch (NoSuchMethodException var2) {throw new NoSuchMethodError(var2.getMessage());} catch (ClassNotFoundException var3) {throw new NoClassDefFoundError(var3.getMessage());}} }$Proxy0 类里面有一个跟 Hello 一样签名的 say() 方法其中 this.h 绑定的是刚才传入的 JDKProxy 对象所以当调用 Hello.say() 的时候实际被转发到了JDKProxy.invoke()。 单纯从代理功能上来看JDK 默认的代理功能是有一定的局限性的要求被代理的只能是接口。原因是生成的代理类会继承 Proxy 类但Java不支持多重继承。 JDK默认的代理功能最大的问题就是性能问题。生成后的代理类是使用反射来完成方法调用而这种方式相对直接用编码调用来说性能会降低但JDK8及以上版本对反射调用的性能有很大的提升。 除了JDK 默认的nvocationHandler能完成代理功能还有很多其他的第三方框架也可以实现比如Javassist、Byte Buddy 这样的框架。 Javassist定位是能够操纵底层字节码要生成动态代理类比较复杂。但是通过Javassist生成字节码不需要通过反射完成方法调用所以性能会高一些。问题通过Javassist生成一个代理类后此 CtClass 对象会被冻结起来不允许再修改否则再次生成时会报错。 Byte Buddy提供了更容易操作的API编写的代码可读性更高。并且生成的代理类执行速度比Javassist更快。 动态代理框架选型 三个角度考虑 代理类是在运行中生成的那么代理框架生成代理类的速度、生成代理类的字节码大小等等都会影响到其性能——生成的字节码越小运行所占资源就越小。生成的代理类是用于接口方法请求拦截的所以每次调用接口方法的时候都会执行生成的代理类生成的代理类的执行效率就需要很高效。从使用角度出发的选择使用起来很方便、好上手的代理类框架。
http://www.hkea.cn/news/14336794/

相关文章:

  • 网站下载系统如何做系统廊坊seo排名外包
  • 织梦手机网站免费模板杭州建设工程协会
  • 我做网站学软件开发需要什么基础
  • 徐州网站建设外包多梦wordpress
  • php+ajax网站开发典型实例 pdf论坛申请网站备案前置审批
  • 全球做的比较好的网站有什么做树状图的网站
  • 电商型网站wordpress评论框修改
  • 婚恋网站哪家做的最好湘潭专业seo优化价格
  • 需要找做网站的平面设计网格
  • 唐山市网站建设wordpress滑动显示分类文章
  • 友联建设集团官方网站兰州seo快速优化报价
  • 网站在线优化工具工程公司名称大全大气好听
  • 永川做网站的抖音关键词排名
  • 成都专业网站推广公司萍乡网站制作公司
  • 搭建一个自己的网站WordPress写小说插件
  • 哈尔滨app网站开发广州越秀番禺最新通告
  • 我需要网站中卫网红美食打卡地
  • 成都网站制作哪家好网站建设案例 优帮云
  • 专门做护理PDCA的网站最新个人注册公司流程
  • 有哪些做西点及烘焙的网站网站皮肤是怎么做的
  • 网站后来功能重庆万州网站建设报价
  • 做网站和自媒体哪个好公众号wordpress
  • 做网站 excel网站建设最好的公司排名
  • 对门户网站建设情况的报告黄村网站建设公司
  • 建设公司门户网站南宁网站定制团队
  • 手机网站开发服务商惠州网站制作公司哪家好
  • 网站顶部展出的大幅广告代理注册公司需要什么条件
  • 工厂网站建设网站开发是自己开发还是外包的
  • 互联网 网站建设价格流程图制作网页
  • 做网站需要什么材料域名过期了被别人拿去做违法