「Java面试」荃网讲的蕞好的SPI机制,什么是Java SPI它有什么作用

简介: 很多主流框架都用到了SPI机制,比如Dubbo、Spring都有用到,可能很多小伙伴也听说过。今天给大家来聊一聊什么是SPI,它用什么作用?

很多主流框架都用到了SPI机制,比如Dubbo、Spring都有用到,可能很多小伙伴也听说过。今天给大家来聊一聊什么是SPI,它用什么作用?


另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码免费领取!


(附赠10万字大厂内部面试资料!)

1、什么是SPI

SPI全称Service Provider Interface,它是Java提供的一套用来被第三方实现或者扩展的API。

e023ab9cfbe08c603c3287d17dd55647.jpg

如图所示,简单来说,就是我们定义一个标准的接口,然后第三方的库里面可以实现这个接口。

那么,程序在运行的时候,会根据配置信息动态加载第三方实现的类,从而完成功能动态扩展的机制。

2、SPI的应用场景

SPI的主要作用是解耦。适用于调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。

在Java中,SPI机制有一个非常典型的实现案例,就是数据库驱动java.jdbc.Driver

cdf507bfa9a6b450779e19a165548e48.jpg

如图所示,JDK里面定义了数据库驱动类Driver,它是一个接口,JDK并没有提供实现,具体的实现是由第三方数据库厂商来完成的。

在程序运行的时候,会根据我们声明的驱动类型,来动态加载对应的扩展实现,从而完成数据库的连接。

c248b9ca517186d194ea4ec80db6010d.jpg

除此之外,在很多开源框架里面都借鉴了Java SPI的思想,提供了自己的SPI框架,比如Dubbo定义了ExtensionLoader,实现功能的扩展。

Spring提供了SpringFactoriesLoader,实现外部功能的集成,基于Servlet 3.0规范对ServletContainerInitializer的实现。

Java中SPI的设计主要用到了桥接模式,在实际开发中,借鉴这种思想可以在不修改核心代码的情况下,完成提供功能的增强和扩展,而且不需要显式地依赖于继承或者接口。以上就是我对Java SPI的理解。

最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以扫描文章底部二维码拿!希望能够以此来提高各位粉丝的通过率。

ee90d9963df444db88b33d6e798a5b94.gif

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关文章
|
3天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
5天前
|
Java
Java面向对象实践小结(含面试题)(下)
Java面向对象实践小结(含面试题)(下)
14 1
|
6天前
|
Java
【专栏】Java中的反射机制与应用实例
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
1天前
|
缓存 NoSQL Java
17:缓存机制-Java Spring
17:缓存机制-Java Spring
12 5
|
1天前
|
存储 前端开发 搜索推荐
13:Session机制实现用户登录与注销功能-Java Web
13:Session机制实现用户登录与注销功能-Java Web
13 3
|
1天前
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
8 1
|
4天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
4天前
|
安全 Java 测试技术
利用Java反射机制提高Spring Boot的代码质量:概念与实战
【4月更文挑战第29天】Java反射机制提供了一种强大的方法来在运行时检查或修改类和对象的行为。在Spring Boot应用中,合理利用反射可以提高代码的灵活性和可维护性。本篇博客将探讨Java反射的核心概念,并展示如何通过反射提高Spring Boot项目的代码质量。
20 0
|
5天前
|
存储 缓存 开发框架
Java基础面试题小结(下)
Java基础面试题小结(下)
12 0
|
5天前
|
存储 安全 Java
Java基础面试题小结(上)
Java基础面试题小结(上)
13 0