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

使用SPI机制进行插头 - 脱钩

时间:2023-03-05 22:33:56 网络应用技术

  最近重建了基础数据加上剥夺中间件,有些内容需要解耦:在这里可以通过SPI机制进行想象,以便访问业务可以使插件定制扩展。在该插件中,请在该插件中进行定制扩展。中间部分,同时提供了界面业务党,以自行扩展其他分解算法:RSA等。然后让我们在这里总结一下SPI机制是什么。

  SPI的全名是服务提供商界面,这是一种服务发现机制。通过classPath路径中的meta -inf/services文件夹,文件中定义的类是自动加载的类。它通常用于扩展第三阶 -API并更换插头-in。

  我之前曾在Dubbo引入SPI机制。Dubbo中的膨胀点机制增强了JDK的SPI,并解决了JDK SPI的一些疼痛点:

  有关详细信息,请参阅文章Dubbo-Extensionloader。

  根据上述SPI的想法,我们在下面意识到一个小例子。

  上面定义的接口可以理解为规范,每个服务提供商都可以实现。上面的接口将在下面实现。实施内容是该接口的特定业务逻辑的实现。简化此处的处理并直接打印一个句子。

  公共类Aescipherstrategy实现CipherStrategy {

  }

  需要在路径下定义配置文件。

  SPI机制已用于扩展接口,并且有两个扩展点。从总体上讲,标准接口定义为规范,扩展点被实现为不同的服务提供商,以便将其插入和提取。:Java提供了一个数据库驱动程序界面,并且不同的数据库提供程序实现它。我们还可以在数据库提供商的客户端依赖项中找到SPI定义的实现类名称。MysQL可以在依赖关系中找到接口的实现:.look look look在以下代码中:

  我们可以通过或方法获得标准接口的扩展类别。两种方法与上面所示的两种方法不同。

  如输出结果所示:实现了两种方法,并且执行结果是一致的。

  有人一定会说:这是策略模式和界面。为什么要定义配置文件是如此复杂?在这里有必要澄清场景:接口定义,接口实现不在服务中,软件包。解决:开发中间件时,通常将其定义为解密接口,路线转发接口和融合策略解决方案。它可以在中间部分提供常用和通用的默认实现方法。当实施上述接口时,它不容易处理,并且必须推动中间件以提供此功能。因此,SPI机制可用于曝光界面和业务团体可以自己实施以实现扩展功能和插入插件的开发。顺便说一下,SPI机制由Java中的默认设备提供,但是机制中有一些痛点,并且引入部分已被解释。SPI机制被重写为Dubbo中的扩展负载方法,该方法可以实现更强的插头开发。

  Dubbo的强大服务治理能力不仅反映在核心框架中,而且还反映了其出色的扩展功能和对周围支撑设施的支持。通过过滤器,路由器,协议等,几乎每个关键过程的扩展点定义,我们都可以丰富Dubbo的功能或与其他微服务支持系统(包括事务和跟踪)实施对接。有关详细信息,请参阅Dubbo可伸缩性的详细信息。您还可以在Apache/Dubbo-Spi-extensions项目中找到和更多扩展实现。

  对家庭说,让我们看一下如何加载源代码以获取接口的实现类。根据该方法,我们输入了源代码如何加载SPI以获得实例。

  如源代码中所示:首先排序常用的重要成员变量。注意:源代码的一部分已被删除和忽略。

  通过这种方式,我们有一个一般环境:

  该方法中有两种重载方法:

  在内部类中找到实现类和实现类的创建的过程。当我们调用或是内部方法时,实施方法是实现的。因此,我们关注该方法。其中,该方法将被调用。详细查看下面的源代码:

  上面的逻辑更多是确定当前接口是否是在配置文件中定义的。如果存在存在,则将获得延续方法。在逻辑中,使用方法确实获得了接口类的实现类。

  以下逻辑是获取实现接口的类对象,以通过NextName接口实现接口,以及类的目的过程。课程中,实例化对象也放在定义的linkedhashmap集合中。,源代码部分已经结束。获得接口实现类的对象实例,然后下一件事是业务应用程序过程,可以用于您想要的内容。

  SPI机制经常在日常开发中遇到,但是我们正在关注使用中间件功能的使用,而忽略了它的本质如何实现扩展和灵活的插头 - 可以插入。

  从上面的类的上面接口实现,可以看出该方法是熟悉的:方法。当我们首次使用JDBC连接MySQL数据库时,它不仅是数据库连接驱动程序,然后获得了数据库连接通过Drivermanager。

  4.1.1加载驱动程序我们继续查看类是如何加载的。

  4.1.2创建一个驱动程序实例已通过完整限制的类名称加载到MySQL实现类中,因此应使用Next()方法的使用来初始化实现类。实现类仅完成:驱动程序。在Drivermanager中注册的MySQL的实现类。

  4.1.3获取方法中的连接连接以获取数据库连接信息。在这里,加载了已注册的所有驱动程序实现类的周期。调用连接连接方法以获取数据库连接并返回。

  4.1.4自定义扩展实现类我们知道JDBC数据库连接的创建过程。我们根据SPI机制自定义数据库连接方法,我们可以修改并添加一些信息。它可以从理论上完成。

  从输出打印信息可以看出,当加载实现类时,数据库驱动程序实现类已加载到我们的自定义类。因为我们继承了类,所以数据库连接信息最终由该类完成。同时,我们还可以在中国看到目前的两个实现类。

  数据验证可以避免编写大量逻辑进行验证判断,并且可以通过文档限制为格式格式。界面提供了一系列的抽象功能。其功能的特定扩展也通过SPI机制实现。,您可以特别总结常用的数据验证方法,以及如何实现和练习实际的基本类别检查。

  文件加载方法每个扩展点接口每个扩展点接口的文件,一个文件,所有文件的所有文件(是否支持固定的实现且不支持)。它只能按顺序加载。实现,通常不支持Dubbo SPI主机,按顺序加载。但是Spring Boot Class Loader将优先加载用户定义的Spring.ftactories文件,这可以确保用户定义的工厂方法是第一个。Dubbo内部依赖关系中的其他依赖性是通过目录区分的,以区分dubbo build -in spi和外部SPI,该dubbo在SPI和外部SPI中优先考虑内部加载,以确保内部优先级在最高否否。全文。