Java 什么是ServiceLoader?它是如何使用的?
我遇到过,不清楚它适合哪些用例Java 什么是ServiceLoader?它是如何使用的?,java,serviceloader,Java,Serviceloader,我遇到过,不清楚它适合哪些用例 什么时候会使用ServiceLoader?当我听到关于ServiceLoader的事情时,我想到的第一件事是JDBC。此技术提供了从类路径加载JDBC驱动程序类,而无需使用Class.forName(Classclazz) 另外,我确信除了JDBC之外,还有许多使用ServiceLoader的例子。您熟悉这个原理吗 Java通过ServiceLoader实现了它。该类用于在类路径上定位接口的实现类。您传入一个服务接口,就得到了该服务的一个或多个实现 你可能会找到一
什么时候会使用
ServiceLoader
?当我听到关于ServiceLoader
的事情时,我想到的第一件事是JDBC
。此技术提供了从类路径加载JDBC驱动程序类,而无需使用Class.forName(Classclazz)
另外,我确信除了JDBC之外,还有许多使用
ServiceLoader
的例子。您熟悉这个原理吗
Java通过ServiceLoader
实现了它。该类用于在类路径上定位接口的实现类。您传入一个服务接口,就得到了该服务的一个或多个实现
你可能会找到一个很好的实际例子
注:尽管它是一个现成的解决方案和一个非常简单的工具,但我认为它已经过时,与Spring IoC容器和Google Guice相比不够灵活。
ServiceLoader
是Java轻量级的替代品,可以替代Spring、Guice等成熟的IoC容器,它比那些框架有更少的细节,但是当你只想找到实现接口的类时,它在基本用例中工作得很好
大多数应用程序服务器都有ServiceLoader的一些用法,您可以在实践中看到:
当您希望程序具有“插件”功能时,可以使用ServiceLoader。当您希望允许人们通过向包含特定功能子集实现的类路径添加jar文件来定制您的应用程序时,您可以使用ServiceLoader在类路径中查找这些实现 ServiceLoader本身就是的一个实现,它已经存在很长时间了。(我相信它是在Java1.3中引入的。) Java SE已经在很多地方使用它来实现这一目的,包括:
- 附加字符集通过
- 其他文件系统通过(请参阅)
- 其他文件内容类型分析器(请参阅)
- 其他首选项通过实现(请参阅)
- 自定义ResourceBundle.Control通过
- 所有子类:
- 其他日历通过和
- 额外货币通过
- 其他地区通过
- 其他时区通过
- 其他图像格式通过
- 其他打印机通过
- 自定义脚本引擎通过
classLoader.getResources(“/META-INF/services/”+spiClass.getName())
的东西手动执行。