java.util.ServiceLoader
一、Java中java.util.ServiceLoader
转载:https://www.cnblogs.com/shangxiaofei/p/10548921.html
https://blog.csdn.net/jjlovefj/article/details/82907400
想必大家多多少少听过spi,具体的解释我就不多说了。但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问题来解释:
实现: 其实具体的实现类就是java.util.ServiceLoader这个类。
要想了解一个机制的原理,首先得知道它是怎么运行的,需要什么配置,才能运行起来。然后再分解来了解实现。对于技术实现也是一样,先看这个类是怎么实现的,先让它跑起来,看到效果。然后再讲原理。
按照使用说明文档,应该分下面几个步骤来使用:
- 创建一个接口文件
- 在resources资源目录下创建META-INF/services文件夹
- 在services文件夹中创建文件,以接口全名命名
- 创建接口实现类,将实现类全名称写在刚才创建好的文件中。
二、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