JAVA 特性 SPI 机制

简介: 在面向对象编程中,基于开闭原则和解耦的需要,一般建议用接口进行模块之间通信编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发现机制。Java SPI就是提供了这样一个机制:为某个接口寻找服务实现的机制。这有点类似IoC的思想,将装配的控制权移交到了程序之外。SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件。

什么是SPI机制?

在面向对象编程中,基于开闭原则和解耦的需要,一般建议用接口进行模块之间通信编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。

为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发现机制。Java SPI就是提供了这样一个机制:为某个接口寻找服务实现的机制。这有点类似IoC的思想,将装配的控制权移交到了程序之外。

SPIService Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件。

SPI主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQLPostgreSQL都有不同的实现提供给用户,而JavaSPI机制可以为某个接口寻找服务实现。JavaSPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦。

当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的META-INF/services/中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。JDK中查找服务的实现的工具类是:java.util.ServiceLoader

为什么要实现SPI机制?

SPI是专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。

SPI将服务接口和具体的服务实现分离开来,将服务调用方和服务实现者解耦,能够提升程序的扩展性、可维护性。修改或者替换服务实现并不需要修改调用方。

相关文章
|
6天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第17天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁。Stream API是一种用于处理集合的新工具,它提供了一种高效且易于使用的方式来处理数据。通过结合使用这两个特性,我们可以编写出更加简洁、高效的Java代码。
16 0
|
6天前
|
存储 安全 Java
Java中的这些String特性可能需要了解下
Java中的String特性你知道哪些?虽然String很常见,通过源码可以看到String的值传递、字符串表和不可变性。本文基于JDK17说明。
14 1
|
7天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
1天前
|
Java 编译器 C语言
java类和对象的基础特性-2
java类和对象的基础特性
6 0
|
2天前
|
分布式计算 Java 程序员
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第21天】本文主要介绍了Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8引入的一种新的编程方式,它允许我们将函数作为参数传递给其他方法。而Stream API则是一种新的数据处理方式,它允许我们以声明式的方式处理数据,使得代码更加简洁易读。
|
2天前
|
并行计算 Java 大数据
Java 8新特性解析及应用
【5月更文挑战第21天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API、Optional类以及新的日期时间API。我们将详细解析这些特性的使用方法和应用场景,帮助读者更好地理解和应用Java 8的新特性。
|
3天前
|
Java API
Java 8新特性之Lambda表达式
【5月更文挑战第20天】本文将介绍Java 8中的一个重要特性——Lambda表达式。Lambda表达式是Java 8引入的一种新的编程语法,它允许我们将函数作为参数传递给方法,从而实现更加简洁、灵活的代码。本文将从Lambda表达式的基本概念、语法、使用方法以及优缺点等方面进行详细介绍,帮助读者更好地理解和应用Lambda表达式。
|
7天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
7天前
|
存储 安全 Java
Java 18新特性
【5月更文挑战第16天】Java 18于2022年3月发布,包含多项新特性和改进,如文件系统链接、文本块、表达式求值API、`ForkJoinPool`优化、`Optional`新方法等。亮点还包括预览特性:Record Pattern Matching for Switch和增强的开关表达式。此外,还有日期时间API扩展、Vector API的进一步孵化、默认UTF-8字符集的研究以及对Security Manager的弃用等。这些更新旨在提升开发效率、性能和安全性。
24 0
|
8天前
|
Java API
Java 8新特性之Lambda表达式与Stream API实践指南
【5月更文挑战第15天】 随着Java语言的不断发展,Java 8作为一个重要的版本,引入了许多令人兴奋的新特性。其中,Lambda表达式和Stream API是Java 8最受关注的两个特性。本文将深入探讨Lambda表达式的基本概念、语法和使用场景,以及如何结合Stream API实现更加简洁、高效的代码编写。通过实例演示,帮助读者快速掌握这两个新特性,提高Java编程能力。