Java的SPI实现解耦

分手后的思念是犯贱 2024-03-24 15:59 97阅读 0赞

概述

SPI的全称是服务提供接口,可以用其来启动框架的扩展和替换组件。

其本质是利用 接口实现+策略模式+配置文件来实现对实现类的动态加载。

在具体的使用中,存在一些约定:

(1)规定在 classPath 的 META-INF/services/ 下,创建该接口的全名称文件

(2)在该文件中,写入该接口实现类全称(路径+文件名),多个实现类的话,分行写。

(3)用的2时候,使用 java.util.ServiceLoader 的 load(Interface.class),获取到实现类,就可以使用了。

值得注意的是,接口实现类必须有一个不带参数的构造方法。

实现案例

在本应用中,存在两个模块,分别为A模块和B模块,这两个模块中,A模块是主模块,B是从模块,B模块是依赖A模块的。但是在目前有一个类,该类中实现在B模块中,A模块需要调用这个类的函数,而模块不能再依赖B模块,此时需要进行解耦。在本实现中,利用SPI的方式进行解耦实现。具体实现方案为:

(1)在A模块新建一个接口:MyLogAppender,具体实现为:

  1. /**
  2. * @author Huang gen(kenfeng)
  3. * @description 自定义的appender接口
  4. * @Since 2021/02/21
  5. **/
  6. public interface MyLogAppender {
  7. /**
  8. * 获取实现的appender
  9. *

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java 模块设计策略

    Java 平台模块系统 (JPMS) 提供了更强的封装、更高的可靠性和更好的关注点分离,有些同学可能没注意到。 不过呢,也是有利有弊。由于模块化应用程序构建在依赖其他模块才能

    相关 JAVA分层

    1、定义 在软件开发中,分层解耦是一种设计原则,旨在将应用程序划分为不同的逻辑层次,使每个层次的功能和责任清晰,从而降低系统的耦合性,提高代码的可维护性、可扩展性和可重用

    相关 JavaSPI实现

    概述 SPI的全称是服务提供接口,可以用其来启动框架的扩展和替换组件。 其本质是利用 接口实现+策略模式+配置文件来实现对实现类的动态加载。 在具体的使用中,存在一些

    相关 软件

    现在在学习AngularJS,其中讲到了逻辑解耦能够大大的提高代码的可调性。不明白解耦是什么东西,于是百度了一下。 说起软件的解耦必然需要谈论耦合度,降低耦合度即可以理解为解

    相关 Java SPI

    什么是SPI? SPI 全称为 (Service Provider Interface) 服务提供接口,是JDK内置的一种服务提供发现机制。SPI是一种动态替换发现的机制