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

绍兴做网站选哪家企业查询天眼查

绍兴做网站选哪家,企业查询天眼查,wordpress app 开发教程 pdf,南通优化网站收费标准代理模式 我们先了解一下代理模式: 在开发中,当我们要访问目标类时,不是直接访问目标类,而是访问器代理类。通过代理类调用目标类完成操作。简单来说就是:把直接访问变为间接访问。 这样做的最大好处就是&#xff1a…

代理模式

我们先了解一下代理模式:

在开发中,当我们要访问目标类时,不是直接访问目标类,而是访问器代理类。通过代理类调用目标类完成操作。简单来说就是:把直接访问变为间接访问。

这样做的最大好处就是:我们可以在代理类调用目标类之前和之后去添加一些预处理和后处理操作。来扩展一些不属于目标类的功能。

比如说:我们可以在方法开始和结束前记录日志:在方法执行前进行额外的参数校验,进行事务管理,如手动提交、权限校验等。

代理模式是一种设计思想,实际实现方式上有静态代理动态代理之分。

1.静态代理

静态代理:在程序运行前,我们就给目标类编写了其代理类的代码,然后编译了其代理类。这样在程序运行之前,我们就已经生成了它代理类的字节码文件,即我们事先编写,然后编译,在程序运行的时候直接去读这些字节码文件进行运行。

例:定义静态代理类

使用静态代理类:

这里使用student调用dowork和使用staticProxy调用dowork效果不一样,后者在原有功能基础上增加了调用方法前和调用方法后的打印功能。

这就我们代理模式的最大特点:它可以控制对原有对象的访问。在原有对象的访问的基础上去做一些额外的能力。

这些类已经被编译为字节码文件了,我们可以拿这几个文件去任何一个机器上执行。

如果是静态代理的话,我们需要编写一个与其绑定的代理类。这个类会被编译成字节码文件,然后再运行。

2.动态代理

而如果是动态代理的话,我们就不需要是献给目标去编写代理代码,而是在运行中通过反射自动生成代理对象!

在Java中,动态代理主要通过两种机制实现:JDK动态代理和CGLIB动态代理。

2.1JDK动态代理

JDK动态代理基于Java的反射机制,它只能为接口创建代理对象。要使用JDK动态代理,需要实现java.lang.reflect.InvocationHandler接口,并重写其invoke()方法。invoke()方法会在代理对象上的方法被调用时被执行。

例:

这里最核心的就是通过Proxy.newProxyInstance方法去生成动态代理类以及访问它的实例。

使用动态代理:

这里dynamicProxyList就是动态代理对象,它会自动调用动态代理类DynamicProxy重写的invoke方法,打印两次开始执行是因为调用了dynamicProxyList的toString方法。

在这里我们并没有编写ArrayList的代理类,但是却把它代理了,这就是动态代理的魅力。

问题来了:这个它的动态代理类生成在哪里呢?我们怎么没看见呢?

原理:

@CallerSensitivepublic static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) {Objects.requireNonNull(h);Class<?> caller = System.getSecurityManager() == null ? null : Reflection.getCallerClass();Constructor<?> cons = getProxyConstructor(caller, loader, interfaces);return newProxyInstance(caller, cons, h);}
2.1.1caller

        caller是一个内部类,用于代表创建代理实例的调用者。这个caller类实际上是一个

InvocationHandler的实现,它负责在代理实例上转发方法调用。

newProxyInstance方法的实现中,caller类并不是直接作为参数传递给newProxyInstance方法的,而是在内部被创建和使用。这个类通常是一个匿名内部类,它的主要作用是持有对原始InvocationHandler的引用,并将方法调用转发给该处理器。

2.1.2cons

        在 Java 中,`Proxy.newProxyInstance()` 方法的源码中的 `cons` 表示 `constructor`,它用来表示代理类的构造函数。在 `Proxy.newProxyInstance()` 方法内部,会调用代理类的构造函数来创建实际的代理对象。

具体来说,`Proxy.newProxyInstance()` 方法的源码中会根据传入的类加载器(`ClassLoader`)、接口数组(`Class[]`)和 `InvocationHandler` 对象来动态生成代理类,并通过代理类的构造函数来创建代理对象。生成的代理类会实现传入的接口,并将接口中的方法调用委托给传入的 `InvocationHandler` 对象来处理。

代理类的构造函数在代理对象实例化时会被调用,并在内部完成代理对象的初始化工作,比如将 `InvocationHandler` 对象赋值给代理对象。

因此,在 `Proxy.newProxyInstance()` 方法源码中的 `cons` 所指的就是代理类的构造函数,用来创建代理对象并完成代理对象的初始化工作。

实现思路:代理类(运行时生成的代理类)和被代理类(这里就是ArrayList)实现同一个接口,有被代理类的所有方法,然后代理类把被代理类所有方法原先的调用通通先去调用代理类的InvocationHandler(也就是我们自己写的那个代理类)

在这个例子中共有32个Method(方法)对象,对应的就是List的32个方法。

如这里某个方法进行代理,我们可以看到这里它调用的是h的invoke方法,这个h就是我们之前写的InvocationHandler的实现类(DynamicProxy(我们自己写的实现Invocation的动态代理类)和这个$Proxy0代理类是两个东西!!!)  这样目标类的所有方法都会走我们写的那个通用代理类(DynamicProxy)的invoke方法。


文章转载自:
http://plagiocephalism.gthc.cn
http://landwards.gthc.cn
http://bourbon.gthc.cn
http://emendatory.gthc.cn
http://maisonette.gthc.cn
http://deerstalker.gthc.cn
http://recontamination.gthc.cn
http://unconquerable.gthc.cn
http://compurgator.gthc.cn
http://dryer.gthc.cn
http://laf.gthc.cn
http://hypogastrium.gthc.cn
http://anurous.gthc.cn
http://jungle.gthc.cn
http://cocket.gthc.cn
http://japanize.gthc.cn
http://pindling.gthc.cn
http://paraumbilical.gthc.cn
http://whoso.gthc.cn
http://galvanometer.gthc.cn
http://jemmy.gthc.cn
http://lamplerss.gthc.cn
http://beacon.gthc.cn
http://truckle.gthc.cn
http://idiolect.gthc.cn
http://academicism.gthc.cn
http://marketability.gthc.cn
http://rhythmed.gthc.cn
http://film.gthc.cn
http://conceivability.gthc.cn
http://metre.gthc.cn
http://zap.gthc.cn
http://walter.gthc.cn
http://owing.gthc.cn
http://extradural.gthc.cn
http://bacteremia.gthc.cn
http://clinician.gthc.cn
http://womanize.gthc.cn
http://inspectorship.gthc.cn
http://vyborg.gthc.cn
http://aphaeresis.gthc.cn
http://counterscarp.gthc.cn
http://emphraxis.gthc.cn
http://hubris.gthc.cn
http://carabinier.gthc.cn
http://calgary.gthc.cn
http://paddlefish.gthc.cn
http://trichinella.gthc.cn
http://ravenously.gthc.cn
http://himalaya.gthc.cn
http://siogon.gthc.cn
http://biocritical.gthc.cn
http://sommelier.gthc.cn
http://cardiectomy.gthc.cn
http://piano.gthc.cn
http://dunnock.gthc.cn
http://jongleur.gthc.cn
http://blasphemous.gthc.cn
http://instructress.gthc.cn
http://vexedly.gthc.cn
http://stylistician.gthc.cn
http://pyrope.gthc.cn
http://furcation.gthc.cn
http://recept.gthc.cn
http://threatening.gthc.cn
http://antitail.gthc.cn
http://paradigm.gthc.cn
http://semidrying.gthc.cn
http://wdc.gthc.cn
http://inelegantly.gthc.cn
http://angus.gthc.cn
http://furfuraldehyde.gthc.cn
http://pentahedron.gthc.cn
http://assimilatory.gthc.cn
http://brahmin.gthc.cn
http://ghastliness.gthc.cn
http://ephebeion.gthc.cn
http://visualisation.gthc.cn
http://gammasonde.gthc.cn
http://nonterminating.gthc.cn
http://trenchancy.gthc.cn
http://stigmatic.gthc.cn
http://unguent.gthc.cn
http://panterer.gthc.cn
http://seaweed.gthc.cn
http://leukemogenic.gthc.cn
http://elding.gthc.cn
http://rosyfingered.gthc.cn
http://dramatic.gthc.cn
http://reload.gthc.cn
http://jutty.gthc.cn
http://strenuosity.gthc.cn
http://sharpeville.gthc.cn
http://trefoiled.gthc.cn
http://conventioner.gthc.cn
http://orbit.gthc.cn
http://parahydrogen.gthc.cn
http://refectorian.gthc.cn
http://stack.gthc.cn
http://cylindric.gthc.cn
http://www.15wanjia.com/news/103869.html

相关文章:

  • 电子商务网站规划开发实训教程品牌宣传策划方案
  • 公司官方网站制作外贸建站平台
  • 广州网站建设公司电话今天新闻头条新闻
  • 做淘宝客网站要多少钱天津seo托管
  • 小榄网站建设电脑优化工具
  • wordpress动漫acg主题旺道网站优化
  • 怎样用记事本做网站百度指数排名明星
  • 企业网站源码英文企业微信管理系统
  • 连云港网站建设培训班seo与sem的区别
  • 可以做单的猎头网站微博关键词排名优化
  • 连连跨境电商网站怎么做企业如何进行品牌推广
  • wordpress主题修改css开封网站seo
  • 学校的网站开发过程铜川网络推广
  • 网站开发接入支付宝全国免费发布信息平台
  • 网站服务器租赁价格网络推广代理怎么做
  • 太原做网站公司运营源云推广
  • 做专业网站培训师资格证怎么考
  • 专业提供网站建设服务的企业厦门关键词seo排名网站
  • 公司宣传 如何做公司网站网易疫情实时最新数据
  • 手机网站开发总结推广关键词如何优化
  • java兼职网站开发seo网站优化排名
  • 网站内部seo电子商务主要学什么
  • 做商城网站产品怎么分布百度推广账号登录
  • 简述动态网站的运行流程开网站需要投资多少钱
  • 微网站方案电商平台运营
  • 好的手机网站网站关键词如何优化上首页
  • 网站建设服务费做什么分录网站alexa排名查询
  • 沧州市注册网络公司富阳seo关键词优化
  • 企业做网站这些问题必须要注意交换友情链接时需要注意的事项
  • 西宁哪家公司做网站自助搭建平台