我遇到了 the documentation of ServiceLoader
并且不清楚它适用于哪些用例。
什么时候使用ServiceLoader
?
最佳答案
当您希望您的程序具有“插件”功能时,您可以使用 ServiceLoader。当您希望人们通过将 jar 文件添加到包含特定功能子集实现的类路径来自定义您的应用程序时,您可以使用 ServiceLoader 在类路径中查找这些实现。
ServiceLoader 本身是 jar SPI specification 的一个实现,已经存在了很长时间。 (我相信它是在 Java 1.3 中引入的。)
Java SE 已经在很多地方将它用于这个目的,包括:
- 通过 CharsetProvider 添加的字符集
- 其他文件系统通过FileSystemProvider (参见 FileSystems)
- 通过 FileTypeDetector 提供的附加文件内容类型分析器(参见 Files.probeContentType)
- 通过 PreferencesFactory 实现的其他首选项(参见 Preferences)
- 自定义 ResourceBundle.Control 通过 ResourceBundleControlProvider
- LocaleServiceProvider 的所有子类:
- 其他日历通过 CalendarDataProvider和 CalendarNameProvider
- 通过 CurrencyNameProvider 添加货币
- 其他地区通过 LocaleNameProvider
- 其他时区通过 TimeZoneNameProvider
- 其他图像格式通过 IIORegistry
- 其他打印机通过 PrintServiceLookup
- 通过 ScriptEngineFactory 自定义脚本引擎
关于java - 什么是 ServiceLoader 以及如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204709/