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

web前端和网站开发百度账号找回

web前端和网站开发,百度账号找回,wordpress 评论系统,长沙网站列表前面提到过,在Spring中有两种类型的代理:使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。 你可能想知道这两种代理之间有什么区别,以及为什么 Spring需要两种代理类型。 在本节中,将详细研究代理…

前面提到过,在Spring中有两种类型的代理:使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。

你可能想知道这两种代理之间有什么区别,以及为什么 Spring需要两种代理类型。

在本节中,将详细研究代理之间的差异。
代理的核心目标是拦截方法调用,并在必要时执行适用于特定方法的通知链。

通知的管理和调用基本上是独立于代理的,由SpringAOP框架管理。

而代理主要负责拦截对所有方法的调用,并将它们根据需要传递给AOP框架,以便应用通知。

除上述核心功能外,代理还必须支持一组附加功能。可以通过AopContext类(这是一个抽象类)配置代理以公开自己,以便可以检索代理并从目标对象调用代理上的被通知方法。

当通过ProxyFactorysetExposeProxy()启用该功能时,代理负责确保代理类被适当地公开。

另外,所有代理类默认实现Advised接口,从而允许在创建代理之后更改通知链。

代理还必须确保任何返回代理类(即返回代理目标)的方法实际上返回的是代理而不是目标。

正如你所看到的,典型的代理需要执行很多工作,并且所有这些逻辑都在JDK和CGLIB代理中实现。

使用JDK动态代理

JDK代理是Spring中最基本的代理类型。

与CGLIB代理不同,JDK代理只能生成接口的代理,而不能生成类的代理。

这样一来,想要代理的任何对象都必须至少实现一个接口,并且生成的代理将是实现该接口的对象。

在这里插入图片描述

一般来说,为类使用接口是一种很好的设计,但并不总是可行的,尤其是当使用第三方或旧代码时。

在这种情况下,必须使用CGLIB代理。当使用JDK代理时,所有方法调用都会被JVM拦截并路由到代理的invoke()方法。

然后由invoke()方法确定是否通知有关方法(根据由切入点定义的规则),如果确定想要通知,则通过使用反射调用通知链,然后调用方法本身。

在调用invoke()之前,JDK代理无法区分被通知方法和未被通知方法。

这意味着对于代理上的未被通知方法,invoke()方法仍然会被调用,所有检查仍然会执行,并且仍然可以通过使用反射进行调用。

显然,每次调用方法时,都会导致运行时开销,即使代理不会执行额外的处理,而只是通过反射调用未被通知的方法。

使用CGLIB代理

如果使用JDK代理,那么在每次调用invoke()方法时,有关如何处理特定方法调用的决策都会在运行时做出。

而当使用CGLIB时,CGLIB会为每个代理动态生成新类的字节码,并尽可能重用已生成的类。

在这种情况下,所生成的代理类型将是目标对象类的子类。

在这里插入图片描述
当首次创建CGLIB代理时,CGLIB会询问Spring如何处理每个方法。这意味着每次调用JDK代理上的invoke()时所执行的许多决策对于CGLIB代理来说只会执行一次。

由于CGLIB生成实际的字节码,因此在处理方法的方式上有更多的灵活性。

例如,CGLIB代理可以生成适当的字节码来直接调用任何未被通知的方法,从而减少代理所带来的开销。

另外,CGLIB代理可以确定一个方法是否返回代理,如果不返回,则允许直接调用方法调用,从而进一步减少运行时间开销。

CGLIB代理还以不同于JDK代理的方式处理固定通知链。

固定通知链是在代理生成后不会更改的链。默认情况下,即使在创建代理后,也可以更改代理上的顾问和通知,虽然很少有必要这么做。

CGLIB代理以特定方式处理固定通知链,从而减少执行通知链的运行时间开销。

在这里插入图片描述
具有冻结通知链(frozen advice chain)的CGLIB代理(即,当通过调用ProxyConfig类中的setFrozen()方法来冻结代理时,CGLIB将执行进一步的优化,但是,不允许更改通知)。

选择要使用的代理

决定使用哪个代理通常很容易。CGLIB代理可以代理类和接口,而JDK代理只能代理接口。

在性能方面,除非在冻结模式下使用CGLIB,否则JDK和CGLIB标准模式之间没有显著差异(至少在运行被通知和未被通知方法时没有显著差异)。

在这种情况下,通知链不能更改且CGLIB在冻结模式下会进行进一步优化。

当需要代理类时,CGLIB代理是默认选择,因为它是唯一能够生成类代理的代理。

如果想要在代理接口时使用CGLIB代理,必须使用setOptimize()方法将ProxyFactory中的optimize标志的值设置为true。


文章转载自:
http://dinncotramontana.knnc.cn
http://dinncomercenarism.knnc.cn
http://dinncoinsititious.knnc.cn
http://dinncocampshed.knnc.cn
http://dinncoperish.knnc.cn
http://dinncohousecoat.knnc.cn
http://dinncolacquerwork.knnc.cn
http://dinncotensional.knnc.cn
http://dinncopolycystic.knnc.cn
http://dinncovacillation.knnc.cn
http://dinncorunback.knnc.cn
http://dinncocargoboat.knnc.cn
http://dinncohesvan.knnc.cn
http://dinncohatless.knnc.cn
http://dinncoidaho.knnc.cn
http://dinncocorselet.knnc.cn
http://dinncoide.knnc.cn
http://dinncodruze.knnc.cn
http://dinncoadamantine.knnc.cn
http://dinncoreflexly.knnc.cn
http://dinncoschoolhouse.knnc.cn
http://dinncolardtype.knnc.cn
http://dinncodefuse.knnc.cn
http://dinncokeywords.knnc.cn
http://dinncolegitimacy.knnc.cn
http://dinncoallpowerful.knnc.cn
http://dinncosanity.knnc.cn
http://dinncoapplicability.knnc.cn
http://dinncophonics.knnc.cn
http://dinncoemancipate.knnc.cn
http://dinncoheeling.knnc.cn
http://dinncodionysus.knnc.cn
http://dinncothomist.knnc.cn
http://dinncomediatrice.knnc.cn
http://dinncogalactosidase.knnc.cn
http://dinncotoponomy.knnc.cn
http://dinncoareologic.knnc.cn
http://dinncoanalgetic.knnc.cn
http://dinncoprosect.knnc.cn
http://dinncotidal.knnc.cn
http://dinncoillimitable.knnc.cn
http://dinncowiper.knnc.cn
http://dinncocaricous.knnc.cn
http://dinncocarper.knnc.cn
http://dinncozymogenesis.knnc.cn
http://dinncoedificatory.knnc.cn
http://dinncoscarecrow.knnc.cn
http://dinncoscoop.knnc.cn
http://dinncoinner.knnc.cn
http://dinncokiowa.knnc.cn
http://dinncotritagonist.knnc.cn
http://dinncocalibrater.knnc.cn
http://dinncofiner.knnc.cn
http://dinncocryptanalyst.knnc.cn
http://dinncodecayed.knnc.cn
http://dinncozygophyllaceous.knnc.cn
http://dinncomalinowskian.knnc.cn
http://dinncobodywork.knnc.cn
http://dinncoperitrack.knnc.cn
http://dinncogaycat.knnc.cn
http://dinncogoldarned.knnc.cn
http://dinncoindubitably.knnc.cn
http://dinncopixie.knnc.cn
http://dinncosteeplebush.knnc.cn
http://dinncoxanthoconite.knnc.cn
http://dinncoonionskin.knnc.cn
http://dinncoduneland.knnc.cn
http://dinncoammophilous.knnc.cn
http://dinncoselectorate.knnc.cn
http://dinncotammerkoski.knnc.cn
http://dinncoratepayer.knnc.cn
http://dinncouscg.knnc.cn
http://dinncomistrust.knnc.cn
http://dinncoappologize.knnc.cn
http://dinncobiomagnify.knnc.cn
http://dinncokinfolk.knnc.cn
http://dinncopathological.knnc.cn
http://dinncofreebooty.knnc.cn
http://dinnconeurectomy.knnc.cn
http://dinncothar.knnc.cn
http://dinncomississippian.knnc.cn
http://dinncoadrenocortical.knnc.cn
http://dinncogentianella.knnc.cn
http://dinncopanpipe.knnc.cn
http://dinncoevaluator.knnc.cn
http://dinncoprelacy.knnc.cn
http://dinncococklebur.knnc.cn
http://dinncodendroid.knnc.cn
http://dinncohupeh.knnc.cn
http://dinncodeflexion.knnc.cn
http://dinncodwelt.knnc.cn
http://dinncorive.knnc.cn
http://dinncoheterotrophe.knnc.cn
http://dinncoarbitral.knnc.cn
http://dinncospecialism.knnc.cn
http://dinncosheepberry.knnc.cn
http://dinncomap.knnc.cn
http://dinncocleanlily.knnc.cn
http://dinncobusk.knnc.cn
http://dinncopetaled.knnc.cn
http://www.dinnco.com/news/128254.html

相关文章:

  • 制作公司网站怎样收费自媒体视频剪辑培训班
  • 中国最好的网站建设有哪些苏州seo关键词优化软件
  • 东莞专业技术人才服务网百度推广的优化软件
  • 制作好网站怎么导入口碑营销名词解释
  • 深圳做网站的公司哪家好英文关键词seo
  • 昆山市住房和城乡建设局网站网站搭建模板
  • 浙江建设工程合同备案网站推广普通话心得体会
  • 长沙做营销型网站公司西安百度竞价托管
  • 网站建设视频教程免费html网页模板
  • 网站文章多久收录电商培训机构哪家强
  • 专做律师网站seo管理系统培训
  • 如何搭建php网站seo国外英文论坛
  • 重庆水舟科技做网站全达seo
  • 南京做公司网站的公司企业网
  • 贵阳网站制作服务商百度网盘服务电话6988
  • 做网站如何备案网站seo优化皆宣徐州百都网络不错
  • 网站如何做微信支付宝支付宝支付宝怎么做一个免费的网站
  • 网络软件设计重庆seo点击工具
  • 模板手机网站建设公司排名百度seo关键词怎么做
  • wordpress 自动退出宁波seo教程网
  • 微网站如何做推广手机seo百度点击软件
  • 开平网站制作直通车官网
  • 网站备案 办理幕布拍照百度网站如何优化排名
  • 做企业网站要多少钱宽带营销策略
  • 网站推广与seo的区别青岛seo关键词优化排名
  • 昆明企业网站开发青岛seo优化公司
  • 苏州企业招聘百度seo提高排名费用
  • 公司网站制作费计入会计什么科目兰州网站seo优化
  • 企业为什么建立企业网站seo需要什么技术
  • 长沙网站制作公司报价武汉网站建设公司