当前位置: 首页 > 网络应用技术

Dubbo的SPI机制简介

时间:2023-03-05 17:50:53 网络应用技术

  SPI的全名是服务提供商界面。这是Java提供的集合,将由第三方实施或扩展。它可用于启用框架扩展和更换组件。

  系统中各个模块中通常有许多不同的实现方案,例如日志模块,XML解析模块,JDBC模块和其他解决方案。在面向对象的对象的设计中,我们通常建议该模块基于接口编程。,并且该模块不会使实施类都难。一旦代码涉及特定的实现类,它违反了插入原则。如果需要实现,则需要修改代码。为了在组装模块时在程序中实现动态指示,这需要服务发现机制。JavaSPI提供了这样的机制:找到用于实现服务的机制,以实现用于某些界面。与IOC想法相似的位是将组件控制的控制权移至程序。这种机制在模块化设计中尤为重要。

  ServicEloDADER不加载与加载过程中所有接口的实现类相对应的文件。instead,执行接口时,您已穿越和加载。

  1.加载方法

  2.获取延迟装载机

  3.调用延迟加载程序的hasnext()方法

  4. Next()方法

  优点:业务代码和特定实施是为了轻松扩展。如果您需要添加新逻辑,则不需要修改主过程,并直接在PI配置文件中直接添加实现类的完整限量名称。

  缺点:粒径不足以准确地定位某个实现类。执行所有实现类。

  1.创建enableConfiguration

  2.定义元I-Inf/spring。

  3.从Springboot开始

  Springbot开始时,回去加载Mybatisautoconfiguration类。

  1. Springboot启动时,当RefreshContext()()返回@Import的选择器。

  2.然后执行AutoConfigurationImportSelector的Proces()方法以获取相应的配置列表。

  3.弹簧启动配置的配置类。

  代码

  在Meta-Inf/Dubbo目录下配置配置文件(com.example.spidemo.dubbo.base.order)

  测试课

  过程

  ExtensionLoader.getExtensionLoader(order.class);过程

  代码分析

  实际上,我们很难发现以上只是加载了与ExtensionLoader的ExtensionFactory getAdaptiveExtension()()()相对应的stever

  - > AdaptiveExtensionFactory

  1.常见方法ExtensionLoader.getExtExsion(“ Alipay”);过程

  代码分析

  2.通用方法loader.getAdaptiveExtent();过程

  代码分析

  3.通用方法加载程序。getActivateExtentance(url,“”,“在线”);课后讨论:

  总结Dubbo SPI的优势: