[英]What is ServiceLoader and how is it used?
希望程序具有“插件”功能时,可以使用ServiceLoader。 如果要允许人们通过将jar文件添加到包含特定功能子集的实现的jar路径中来自定义应用程序,则可以使用ServiceLoader在classpath中查找那些实现。
ServiceLoader本身是jar SPI规范的实现,该规范已经存在了很长时间。 (我相信它是在Java 1.3中引入的。)
Java SE已经在很多地方将它用于此目的,包括:
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.