【发布时间】:2010-12-28 09:09:35
【问题描述】:
Java 中 Meta-INF 服务的目的是什么?
【问题讨论】:
Java 中 Meta-INF 服务的目的是什么?
【问题讨论】:
用于存储服务提供者配置文件。
服务提供者是一个服务提供者接口的实现,封装为 JAR。
服务加载器发现并加载服务提供者配置文件中声明的所有实现。
配置文件是以接口的完全限定名称命名的文件,其内容是实现的完全限定名称列表。
以下是 Servlet 3.0 在 webapp 启动时使用的 javax.servlet.ServletContainerInitializer 提供程序配置文件的示例。
org.apache.jasper.servlet.JasperInitializer
org.springframework.web.SpringServletContainerInitializer
在这个例子中
tomcat启动webapp时同时调用
onStartup(java.util.Set<java.lang.Class<?>> types, ServletContext context)
JasperInitializer 和 SpringServletContainerInitializer 类的方法
【讨论】:
【讨论】:
在 Java 9 之前,ServiceLoader 从 META-INF/services 中的文件中找到服务的实现,该文件具有与服务接口相同的完全限定名称。它包含实现的完全限定名称列表。
从 Java 9 开始,它有模块,模块有模块描述符。 这些“模块”可以定义 ServiceLoader 可以加载的服务及其实现。
【讨论】: