欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java.util.ServiceLoader

程序员文章站 2022-05-21 20:36:21
...

一、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