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的优势: