什么是 ServiceLoader,它是如何使用的?

我遇到了文档,但ServiceLoader不清楚它适合哪些用例。

什么时候用ServiceLoader


汪汪一只猫
浏览 202回答 3
3回答

冉冉说

当您希望您的程序具有“插件”功能时,您可以使用 ServiceLoader。当您希望允许人们通过将 jar 文件添加到包含特定功能子集实现的类路径来自定义您的应用程序时,您可以使用 ServiceLoader 在类路径中查找这些实现。ServiceLoader 本身就是jar SPI 规范的一个实现,这个规范已经存在很长时间了。(我相信它是在 Java 1.3 中引入的。)Java SE 已经在很多地方将它用于这个目的,包括:通过CharsetProvider 的额外字符集通过FileSystemProvider 的附加文件系统(请参阅FileSystems)通过FileTypeDetector 的其他文件内容类型分析器(请参阅Files.probeContentType)附加首选项通过PreferencesFactory实现(参见Preferences)通过ResourceBundleControlProvider自定义ResourceBundle.ControlLocaleServiceProvider 的所有子类:通过CalendarDataProvider和CalendarNameProvider附加日历通过CurrencyNameProvider增加货币通过LocaleNameProvider 的附加语言环境通过TimeZoneNameProvider 的额外时区通过IIORegistry 的其他图像格式通过PrintServiceLookup 的附加打印机通过ScriptEngineFactory自定义脚本引擎

HUWWW

你熟悉“控制反转”的原理吗?Java 实现了它ServiceLoader。该类旨在在类路径上定位接口的实现类。您传入一个服务接口,您将获得该服务的一个或多个实现。您可能会在此处找到一个很好的实际示例。PS:尽管它是一个开箱即用的解决方案和一个非常简单的工具,但我认为与 Spring IoC Container 和 Google Guice 相比,它已经过时且不够灵活。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java