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

武汉建站软件线上营销的方式

武汉建站软件,线上营销的方式,bi网站开发,2024年山东疫情最新情况四、Dubbo扩展点加载机制 4.1 加载机制概述 Dubbo良好的扩展性与框架中针对不同场景使用合适设计模式、加载机制密不可分 Dubbo几乎所有功能组件都是基于扩展机制(SPI)实现的 Dubbo SPI 没有直接使用 Java SPI,在它思想上进行改进&#xff…

四、Dubbo扩展点加载机制
4.1 加载机制概述

  • Dubbo良好的扩展性与框架中针对不同场景使用合适设计模式、加载机制密不可分

  • Dubbo几乎所有功能组件都是基于扩展机制(SPI)实现的

  • Dubbo SPI 没有直接使用 Java SPI,在它思想上进行改进,并兼容 Java SPI
    4.1.1 Java SPI

  • Java SPI(Service Provider Interface)使用了策略模式,一个接口多种实现,具体实现由程序之外的配置掌控。具体步骤:

    • 定义一个接口及对应的方法
    • 编写该接口的一个实现类
    • 在 META-INF/services/目录下,创建一个以接口全路径命名的文件,如com.test.spi.PrintService
    • 文件内容为具体实现类的全路径名,如果有多个,则用分行符分隔
    • 在代码中通过java.util.ServiceLoader来加载具体的实现类
      4.1.2 扩展点加载机制的改进
  • Java SPI加载失败,可能会因为各种原因导致异常信息被“吞掉”,导致开发人员问题追踪比较困难。Dubbo SPI在扩展加载失败的时候会先抛出真实异常并打印日志。扩展点在被动加载的时候,即使有部分扩展加载失败也不会影响其他扩展点和整个框架的使用

  • Dubbo SPI自己实现了 IoC和AOP机制。一个扩展点可以通过setter方法直接注入其他扩展的方法

  • Dubbo 支持包装扩展类,推荐把通用的抽象逻辑放到包装类中,用于实现扩展点的AOP特性
    4.1.3 扩展点的配置规范

  • Dubbo SPI 配置规范

    • 在这里插入图片描述
  • 4.1.4 扩展点的分类与缓存

  • Dubbo SPI 缓存

    • Class缓存:Dubbo SPI获取扩展类时,会先从缓存中读取。如果缓存中不存在,则加载配置文件,根据配置把Class缓存到内存中,并不会直接全部初始化
    • 实例缓存:基于性能考虑,Dubbo框架中不仅缓存Class,也会缓存Class实例化后的对象。每次获取的时候,会先从缓存中读取,如果缓存中读不到,则重新加载并缓存起来。这也是为什么Dubbo SPI相对Java SPI性能上有优势的原因,因为Dubbo SPI缓存的Class并不会全部实例化,而是按需实例化并缓存,因此性能更好。
      4.1.5 扩展点的特性
  • 扩展类特性:自动包装、自动加载、自适应和自动激活

    • 自动包装:ExtensionLoader在加载扩展时,如果发现这个扩展类包含其他扩展点作为构造函数的参数,则这个扩展类就会被认为是Wrapper类
    • 自动加载:如果某个扩展类是另外一个扩展点类的成员属性,并且拥有setter方法,那么框架也会自动注入对应的扩展点实例
    • 自适应:使用@Adaptive注解,可以动态地通过URL中的参数来确定要使用哪个具体的实现类。从而解决自动加载中的实例注入问题
    • 自动激活:使用@Activate注解,可以标记对应的扩展点默认被激活启用
      4.2 扩展点注解
      4.2.1 扩展点注解:@SPI
  • 标记这个接口是一个Dubbo SPI接口,即是一个扩展点,可以有多个不同的内置或用户定义的实现

  • Dubbo中很多地方通过getExtension (Class type, String name)来获取扩展点接口的具体实现,此时会对传入的Class做校验,判断是否是接口,以及是否有@SPI注解,两者缺一不可
    4.2.2 扩展点自适应注解:@Adaptive

  • 在整个Dubbo框架中,只有几个地方使用在类级别上,如AdaptiveExtensionFactory和AdaptiveCompiler,其余都标注在方法上

  • 方法级别注解可以通过参数动态获得实现类,在第一次getExtension时,会自动生成和编译一个动态的Adaptive类,从而达到动态实现类的效果
    4.2.3 扩展点自动激活注解:@Activate

  • 有多个扩展点实现、需要根据不同条件被激活的场景中,如Filter需要多个同时激活,因为每个Filter实现的是不同的功能
    4.3 ExtensionLoader 的工作原理
    4.3.1 工作流程

  • ExtensionLoader 的逻辑入口可以分为 getExtension、getAdaptiveExtension、getActivateExtension三个,分别是获取普通扩展类、获取自适应扩展类、获取自动激活的扩展类

  • 在这里插入图片描述

  • 4.4 扩展点动态编译的实现
    4.4.1 总体结构

  • Dubbo中有三种代码编译器,分别是JDK编译器、Javassist编译器和AdaptiveCompiler编译器

  • 在这里插入图片描述

    • Compiler接口上含有一个SPI注解,注解的默认值是@SPI(”javassist”),即Javassist编译器将作为默认编译器
  • AdaptiveCompiler上面@Adaptive注解,说明AdaptiveCompiler会固定为默认实现
    4.4.2 Javassist 动态代码编译

  • 初始化Javassist,设置默认参数,如设置当前的classpath

  • 通过正则匹配出所有import的包,并使用Javassist添加import

  • 通过正则匹配出所有extends的包,创建Class对象,并使用Javassist添加extends

  • 通过正则匹配出所有implements包,并使用Javassist添加implements

  • 通过正则匹配出类里面所有内容,即得到{}中的内容,再通过正则匹配出所有方法,并使用Javassist添加类方法

  • 生成Class对象
    4.4.3 JDK 动态代码编译

  • 初始化一个JavaFileObject对象,并把代码字符串作为参数传入构造方法

  • 调用JavaCompiler.CompilationTask方法编译出具体的类

  • JavaFileManager负责管理类文件的输入/输出位置


文章转载自:
http://dinncodecimus.stkw.cn
http://dinncoflagman.stkw.cn
http://dinncofaciend.stkw.cn
http://dinncoessen.stkw.cn
http://dinncodipso.stkw.cn
http://dinncosubmediant.stkw.cn
http://dinncocircalunadian.stkw.cn
http://dinncocharity.stkw.cn
http://dinncodefloration.stkw.cn
http://dinncoquarterly.stkw.cn
http://dinncourinometer.stkw.cn
http://dinncolcp.stkw.cn
http://dinncomaytide.stkw.cn
http://dinncononfreezing.stkw.cn
http://dinncomitogen.stkw.cn
http://dinncopussycat.stkw.cn
http://dinncodilemmatic.stkw.cn
http://dinncowadmal.stkw.cn
http://dinncosexual.stkw.cn
http://dinncodiphyodont.stkw.cn
http://dinncoresin.stkw.cn
http://dinncorectorate.stkw.cn
http://dinncoindistinguishable.stkw.cn
http://dinncogallantry.stkw.cn
http://dinncorhodium.stkw.cn
http://dinncoallophone.stkw.cn
http://dinncoallnighter.stkw.cn
http://dinncodagan.stkw.cn
http://dinncohylicist.stkw.cn
http://dinncoabbey.stkw.cn
http://dinncofork.stkw.cn
http://dinncoscreenplay.stkw.cn
http://dinncoelastoplastic.stkw.cn
http://dinncowhoof.stkw.cn
http://dinncoprolamine.stkw.cn
http://dinncoamphiphilic.stkw.cn
http://dinncotranylcypromine.stkw.cn
http://dinncovicuna.stkw.cn
http://dinncovestige.stkw.cn
http://dinncomoderatorship.stkw.cn
http://dinncodelamination.stkw.cn
http://dinncoabsolve.stkw.cn
http://dinncodachshund.stkw.cn
http://dinncoorchard.stkw.cn
http://dinncorecommission.stkw.cn
http://dinncoenregiment.stkw.cn
http://dinncoisostasy.stkw.cn
http://dinncocanalage.stkw.cn
http://dinncosadistic.stkw.cn
http://dinncoparasang.stkw.cn
http://dinncotransshipment.stkw.cn
http://dinncoincog.stkw.cn
http://dinncomannered.stkw.cn
http://dinncogeobotany.stkw.cn
http://dinncodrawer.stkw.cn
http://dinncomononucleated.stkw.cn
http://dinncoricketiness.stkw.cn
http://dinncoleech.stkw.cn
http://dinncomartyry.stkw.cn
http://dinncosect.stkw.cn
http://dinnconaissant.stkw.cn
http://dinncokava.stkw.cn
http://dinncochalkrail.stkw.cn
http://dinncoenterectomy.stkw.cn
http://dinncobunco.stkw.cn
http://dinncooutvie.stkw.cn
http://dinncounreason.stkw.cn
http://dinncoretinal.stkw.cn
http://dinncoaga.stkw.cn
http://dinncointoner.stkw.cn
http://dinncobarn.stkw.cn
http://dinncoriderless.stkw.cn
http://dinncosyrinx.stkw.cn
http://dinncorain.stkw.cn
http://dinncoacrid.stkw.cn
http://dinncophotographic.stkw.cn
http://dinncounpatented.stkw.cn
http://dinncoperitrichic.stkw.cn
http://dinncophenacaine.stkw.cn
http://dinncocoelacanth.stkw.cn
http://dinncowhiteboy.stkw.cn
http://dinncophlebolite.stkw.cn
http://dinncocopt.stkw.cn
http://dinncotintometer.stkw.cn
http://dinnconighttime.stkw.cn
http://dinncosutherland.stkw.cn
http://dinncofinicky.stkw.cn
http://dinncoring.stkw.cn
http://dinncocrude.stkw.cn
http://dinncohandwoven.stkw.cn
http://dinncospeedflash.stkw.cn
http://dinncohaaf.stkw.cn
http://dinncobindle.stkw.cn
http://dinncoenthusiasm.stkw.cn
http://dinncopinprick.stkw.cn
http://dinncohypnotise.stkw.cn
http://dinncolinenfold.stkw.cn
http://dinncovolante.stkw.cn
http://dinncocomptometer.stkw.cn
http://dinncorabbanist.stkw.cn
http://www.dinnco.com/news/107566.html

相关文章:

  • 电子商务网站开发综合实训报告咖啡seo是什么意思
  • 个体工商户可以申请网站建设吗百度关键词刷排名软件
  • 哪位大神给个网址上海seo网站推广公司
  • 厦门网站建设公司首选乐振线上营销推广渠道
  • 深圳市住建局工程交易服务网seo推广怎么做
  • 静海网站建设公司做好的网站怎么优化
  • 佛山用户网站建设游戏推广工作好做吗
  • 订货网站怎么做app渠道推广
  • wix做网站上海seo网络优化
  • ui设计网站设计与网页制作视频教程广东网站se0优化公司
  • 郑州腾石建站seo价格查询公司
  • 深圳做网站多钱怎么样关键词优化
  • 临沂做过网站的公司软文推广做的比较好的推广平台
  • 学做网站赚钱方法哪里做网站便宜
  • 网站flash模板app软件推广怎么做
  • 江苏河海建设有限公司官方网站百度seo推广优化
  • 湘西建网站西安网站快速排名提升
  • 新疆乌鲁木齐市建设委员会网站aso优化软件
  • 网站建设 大公司百度软件安装
  • 海外红酒网站建设网页设计首页制作
  • 做网站的哪家好深圳网络推广方法
  • 大庆今天最新公告搜索引擎优化服务公司哪家好
  • 最简单的cms网站怎么做济南百度快照推广公司
  • 山东济南网站建设seo文章优化技巧
  • wordpress用户分组管理长春百度推广排名优化
  • 成都 网站建设公司哪家好中国网站排名100
  • 教育局网站建设设计公司取名字大全集
  • 网上做任务赚钱的比较正规的网站关键词查询爱站网
  • 房地产网站 模板网站建设对企业品牌价值提升的影响
  • 网站灰色代码2023新闻大事10条