繁体   English   中英

什么是ServiceLoader?如何使用?

[英]What is ServiceLoader and how is it used?

ServiceLoader的文档,不清楚它适合什么用例。

什么时候使用ServiceLoader

希望程序具有“插件”功能时,可以使用ServiceLoader。 如果要允许人们通过将jar文件添加到包含特定功能子集的实现的jar路径中来自定义应用程序,则可以使用ServiceLoader在classpath中查找那些实现。

ServiceLoader本身是jar SPI规范的实现,该规范已经存在了很长时间。 (我相信它是在Java 1.3中引入的。)

Java SE已经在很多地方将它用于此目的,包括:

您熟悉“控制反转”原理吗?

Java通过ServiceLoader实现了它。 该类旨在在类路径上找到接口的实现类。 传递服务接口,即可获得该服务的实现。

您可能会在这里找到一个很好的实际例子。


PS:尽管它是一个即用的解决方案和一个非常简单的工具,但与Spring IoC Container和Google Guice相比,我认为它已经过时且不够灵活。

ServiceLoader是Java的轻量级替代品,可以替代Spring,Guice等完整的IoC容器。它比那些框架少很多,但是当您只想查找实现类的接口时,对于基本用例就很好用。

大多数应用程序服务器将具有ServiceLoader的一些用法,您可以在实践中看到这些用法:

https://github.com/apache/tomee/search?q=ServiceLoader&unscoped_q=ServiceLoader

https://github.com/apache/tomcat/search?q=ServiceLoader&unscoped_q=ServiceLoader

https://github.com/wildfly/wildfly/search?q=ServiceLoader&unscoped_q=ServiceLoader

当我听到有关ServiceLoader ,想到的第一件事就是JDBC 此技术提供了从类路径加载JDBC驱动程序类的功能,而无需使用Class.forName(Class<?>clazz)

另外,我确定除了JDBC之外 ,还有很多使用ServiceLoader示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM