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

新吴区住房和建设交通局网站网站建设具体运算

新吴区住房和建设交通局网站,网站建设具体运算,wordpress怎么修改语言,个人网站备案做论坛典型回答 反射机制是 Java 语言提供的一种基本功能,赋予程序在运行时 自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法&#xff…

典型回答

反射机制是 Java 语言提供的一种基本功能,赋予程序在运行时 自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。

动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如用来包装 RPC 调用、面向切面的编程(AOP)。

实现动态代理的方式很多,比如 JDK 自身提供的公台代理,就是主要利用了上面提到的反射机制。还有其他的实现方式,比如利用传说中更高性能的字节码操作机制,类似 ASM、cglib(基于 ASM)、Javassist等。

知识扩展

关于反射

要想知道什么是反射,就需要先来了解什么是“正射”。一般情况下,我们在使用某个类之前已经确定它到底是个什么类了,拿到手就直接可以使用 new 关键字来调用构造方法进行初始化,之后使用这个类的对象来进行操作。

Writer writer = new Writer();
writer.setName("迈克尔.杰克驴");

像上面这个例子,就可以理解为“正射”。
而反射就意味着一开始我们不知道要初始化的类到底是什么,也就没法直接使用 new 关键字创建对象了。

我们只知道这个类的一些基本信息,就好像我们看电影的时候,为了抓住一个犯罪嫌疑人,警察就会问一些目击证人,根据这些证人提供的信息,找专家把犯罪嫌疑人的样貌给画出来——这个过程,就可以称之为反射。

Class clazz = Class.forName("com.itwanger.s39.Writer");
Method method = clazz.getMethod("setName", String.class);
Constructor constructor = clazz.getConstructor();
Object object = constructor.newInstance();
method.invoke(object,"迈克尔.杰克驴");

像上面这个例子,就可以理解为“反射”。
反射的成本是要比正射的高得多。反射的缺点主要有两个。

  • 破坏封装:由于反射允许访问私有字段和私有方法,所以可能会破坏封装而导致安全问题。
  • 性能开销:由于反射涉及到动态解析,因此无法执行 Java 虚拟机优化,再加上反射的写法的确要复杂得多,所以性能要比“正射”差很多,在一些性能敏感的程序中应该避免使用反射。

反射的主要应用场景:

  • 开发通用框架:像Spring ,为了保持通用性,通过配置文件来加载不同的对象,调用不同的方法。
  • 动态代理:在面向切面编程中,需要拦截特定的方法,就会选择动态代理的方式,而动态代理的底层技术就是反射。
  • 注解:注解本身只是起到一个标记符的作用,它需要利用发射机制,根据标记符去执行特定的行为。

关于动态代理

代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

为什么要控制对于某个对象的访问呢? 举个例子: 有这样一个消耗大量系统资源的巨型对象, 你只是偶尔需要使用它, 并非总是需要。
在这里插入图片描述
你可以实现延迟初始化: 在实际有需要时再创建该对象。 对象的所有客户端都要执行延迟初始代码。 不幸的是, 这很可能会带来很多重复代码。

在理想情况下, 我们希望将代码直接放入对象的类中, 但这并非总是能实现: 比如类可能是第三方封闭库的一部分。

解决方案

代理模式建议新建一个与原服务对象接口相同的代理类, 然后更新应用以将代理对象传递给所有原始对象客户端。 代理类接收到客户端请求后会创建实际的服务对象, 并将所有工作委派给它。
在这里插入图片描述
代理将自己伪装成数据库对象, 可在客户端或实际数据库对象不知情的情况下处理延迟初始化和缓存查询结果的工作。

这有什么好处呢? 如果需要在类的主要业务逻辑前后执行一些工作, 你无需修改类就能完成这项工作。 由于代理实现的接口与原类相同, 因此你可将其传递给任何一个使用实际服务对象的客户端。

真实世界类比
在这里插入图片描述
信用卡是银行账户的代理, 银行账户则是一大捆现金的代理。 它们都实现了同样的接口, 均可用于进行支付。 消费者会非常满意, 因为不必随身携带大量现金; 商店老板同样会十分高兴, 因为交易收入能以电子化的方式进入商店的银行账户中, 无需担心存款时出现现金丢失或被抢劫的情况。

代理模式结构

在这里插入图片描述

什么是动态代理

使用 jdk 的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。

动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。

jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理
在这里插入图片描述

动态代理解决了什么问题?

通过代理可以让调用者与实现者之间解耦。比如进行 RPC 调用,框架内部的寻址、序列化、反序列化等,对于调用者往往是没有太大意义的,通过代理,可以提供更加友善的界面。

利用动态代理机制,相应的 stub 等类,可以在运行时生成,对应的调用操作也是动态完成,极大地提高了我们的生产力。

JDK 动态代理在设计和实现上与 cglib 等方式有什么不同,进而如何取舍?

JDK Proxy 的优势:

  • 最小化依赖关系,减少依赖意味着简化开发和维护,JDK 本身的支持,可能比 cglib 更加可靠。
  • 平滑进行 JDK 版本升级,而字节码类库通常需要进行更新以保证在新版 Java 上能够使用。
  • 代码实现简单。

基于类似 cglib 框架的优势:

  • 有的时候调用目标可能不便实现额外接口,从某种角度看,限定调用者实现接口是有些侵入性的实践,类似 cglib 动态代理就没有这种限制。
  • 只操作我们关心的类,而不必为其他相关类增加工作量。
  • 高性能。

我们在选型中,性能未必是唯一考量,可靠性、可维护性、编程工作量等往往是更主要的考虑因素,毕竟标准类库和反射编程的门槛要低得多,代码量也是更加可控的,如果我们比较下不同开源项目在动态代理开发上的投入,也能看到这一点。

http://www.yayakq.cn/news/23393/

相关文章:

  • 网站优化的学习抖音广告怎么投放
  • 网站开发公司需要哪些资质网站轮播图片特效
  • 建设银行网上银行官方网站音乐盒网站源码
  • iis可以做php网站吗景区vi设计案例
  • 经典网站建设案例icp备案网站接入信息
  • 流线型的网站建设商业网站和企业网站的区别
  • 可视化网站开发工具网站服务器提供商
  • 自贡做网站会员管理系统代码
  • 网站建设服务公司石家庄建站凡科
  • 网站建设与运营的公司重庆商城网站制作报价
  • 做电子烟外贸网站有哪些vi设计作品图
  • 怎么上传做 好的网站怎么进行网站关键词优化
  • 做网站要学习什么西安高风险调整
  • ps做素材下载网站有哪些旅游网站策划营销
  • wordpress网站多语言网页在线生成
  • 企业网站建设安阳微博推广渠道
  • 做外贸c2c网站有哪些系统开发案例
  • 如何申请域名邮箱模板网站如何做优化
  • 网站建设 南宁莞城区网站建设公司
  • 价格划算的东莞建网站公司怎么做微信小程序卖东西
  • 做内贸要在哪个网站找客户汽车设计网站大全
  • 网站登录页面模板房产信息网网站
  • 盘锦微商网站建设wordpress 菜单 下拉菜单
  • 国内酒店网站建设自学软件网站开发
  • 网站建设xyhlrj网页设计尺寸参考表
  • 北京微网站设计开发服务宣传栏制作效果图
  • 阿里云建站流程外卖做的比较好的网站
  • jsp网站购物车怎么做如何做一个网站的功能吗
  • 视频分享网站建设游戏交易类网站seo怎么做
  • 网上网站怎么做陕西住房与城乡建设部网站