`

java.util.ServiceLoader

    博客分类:
  • jdk
 
阅读更多

一、Java中java.util.ServiceLoader

转载:https://www.cnblogs.com/shangxiaofei/p/10548921.html

https://blog.csdn.net/jjlovefj/article/details/82907400

想必大家多多少少听过spi,具体的解释我就不多说了。但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问题来解释:

实现: 其实具体的实现类就是java.util.ServiceLoader这个类。

要想了解一个机制的原理,首先得知道它是怎么运行的,需要什么配置,才能运行起来。然后再分解来了解实现。对于技术实现也是一样,先看这个类是怎么实现的,先让它跑起来,看到效果。然后再讲原理。
按照使用说明文档,应该分下面几个步骤来使用:

  1. 创建一个接口文件
  2. 在resources资源目录下创建META-INF/services文件夹
  3. 在services文件夹中创建文件,以接口全名命名
  4. 创建接口实现类,将实现类全名称写在刚才创建好的文件中。

 二、Google类似实现AutoService

google开源的AutoService

 

 

三、spring中相关实现

spring.factories spring.schemas spring.handlers:

org.springframework.core.io.support.SpringFactoriesLoader

—— public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories"

 

org.springframework.beans.factory.xml.PluggableSchemaResolver

—— public static final String DEFAULT_SCHEMA_MAPPINGS_LOCATION = "META-INF/spring.schemas";    

    

org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver

—— public static final String DEFAULT_HANDLER_MAPPINGS_LOCATION = "META-INF/spring.handlers";

 

Spring Factories:

https://www.jianshu.com/p/00e49c607fa1

 

spring.handlers的加载过程:

https://blog.csdn.net/kaka508/article/details/47258661

分享到:
评论

相关推荐

    java.util.ServiceLoader demo

    ServiceLoader<MyService> loader = ServiceLoader.load(MyService.class); for (MyService service : loader) { service.doSomething(); } ``` ### 4. 动态加载与懒加载 `ServiceLoader`实现了迭代器模式,可以...

    JavaServiceProviderInterfaceDemo:Java 的 SPI(服务提供者接口)和 java.util.ServiceLoader 使用的简单演示

    Java 的 SPI(服务提供者接口)和 java.util.ServiceLoader 使用的简单演示。 介绍 这个演示应用程序包括 6 个小 jar 项目。 云服务 演示伪“云服务”提供者。 为服务提供者定义spidemo.cloud.spi.Cloud接口。 ...

    spring-boot-java-util-service-loader:使用java.util.ServiceLoader的示例Spring Boot应用程序在类路径上动态加载所有SPI实现

    Spring Boot java.util.ServiceLoader 使用java.util.ServiceLoader示例Spring Boot应用程序在类路径上动态加载所有实现。 多项目Gradle构建 1个Spring Boot应用 1个SPI项目 2个SPI实施项目 有关java.util....

    ServiceLoader的使用

    - 服务加载器默认按配置文件中的顺序加载服务提供者,如果需要自定义加载顺序,需要实现`java.util.ServiceLoader.Provider`接口。 - `ServiceLoader`的加载过程只执行一次,如果需要多次加载,需要调用`reload()`...

    通过SPI实现动态加载外部jar的实现类

    此外,SPI还支持使用自定义加载器,可以通过实现`java.util.ServiceLoader.Provider`接口来自定义加载逻辑。同时,`java.util.ServiceConfigurationError`异常用于处理配置错误,如找不到配置文件或配置文件格式错误...

    java-service-spi-example:Java SPI(服务提供者示例)

    java.util.ServiceLoader类从 Java 编程语言的第 6 版开始就java.util.ServiceLoader ,它允许您在应用程序中访问和使用不同的服务提供者。 例如,假设服务作者为我们提供了一个名为RandomServiceProvider的接口;...

    textrazor-1.0.1.zip

    service-plugin-loader.zip,在java.util.Serviceloader基础上构建的java.util.Serviceloader服务插件加载器的包装。它用于发现和加载作为应用程序扩展/插件的服务。

    jdk spi机制

    除了基本的SPI机制,还可以通过自定义`java.util.ServiceLoader.Provider-Implementation`元数据来控制服务加载行为,或者使用第三方库如Apache Commons Lang的`ClassUtils`进行更复杂的类加载操作。 总之,JDK的...

    denominator-dynect-4.0.1.zip

    abstract-service-loader.zip,抽象实现包装java.util.service loader以基于META-INF/services entriesAbstract service loader类包装java.util.serviceloader

    Java 服务器信息监控

    Java的`java.util.ServiceLoader`可以帮助我们发现和加载服务,而`java.lang.management.ManagementFactory`可以获取应用的运行时信息,如线程状态、类加载情况等。 为了实现一个全面的服务器监控系统,开发者还...

    java spi实现工程

    ServiceLoader<MyService> loader = ServiceLoader.load(MyService.class); for (MyService service : loader) { service.doSomething(); } ``` 5. **优点** - **可扩展性**:允许第三方开发者扩展应用功能,...

    SPI入门级Demo(三:服务实现者-加法服务)

    ServiceLoader<AdditionService> loader = ServiceLoader.load(AdditionService.class); for (AdditionService service : loader) { System.out.println("加法结果: " + service.add(5, 7)); } } } ``` 5. **...

    SPI示例代码及实现方式

    ServiceLoader<Calculator> loader = ServiceLoader.load(Calculator.class); for (Calculator calculator : loader) { System.out.println("Calculator: " + calculator.getClass().getName()); System.out....

    spi-Demo.rar

    ServiceLoader<MyService> loader = ServiceLoader.load(MyService.class); for (MyService service : loader) { service.doSomething(); } ``` 6. **优势**:SPI使得框架或库可以在不依赖具体实现的情况下...

    Android代码-WMRouter

    WMRouter是一款Android路由框架,基于组件化的...基于SPI (Service Provider Interfaces) 的设计思想,WMRouter提供了ServiceLoader模块,类似Java中的java.util.ServiceLoader,但功能更加完善。通过ServiceLoader可

    JAVA-SPI.rar_site:www.pudn.com_spi

    SPI机制的核心在于`java.util.ServiceLoader`类,它是Java平台的标准服务加载器,用于加载符合特定规范的服务实现。 **一、SPI的工作原理** 1. **定义服务接口**:首先,开发者定义一个公共的接口,这个接口定义了...

    java时区问题

    7. **网络时区同步**:如果需要确保时区数据是最新的,可以使用`tzdata`更新工具或Java的`java.util.ServiceLoader`机制加载外部的时区数据提供者。 了解和熟练掌握这些知识点,可以帮助开发者更准确地处理Java中的...

    Java JDK 6.0基础学习笔记.rar

    还有`java.util.ServiceLoader`,方便加载和使用服务提供者接口。 总的来说,"Java JDK 6.0基础学习笔记"会涵盖这些核心概念,并可能通过实例演示如何使用它们。PPT简体版的学习资料将图文并茂地解释这些知识点,...

    SPI设计思想.zip

    - (2) 使用`ServiceLoader.iterator()`或`ServiceLoader.stream()`遍历加载的服务提供者。 - (3) 对每个服务提供者进行实例化,然后调用其提供的方法。 3. 示例应用: - 在JDBC中,不同的数据库驱动如MySQL、...

Global site tag (gtag.js) - Google Analytics