Java 中 Meta-INF 服务的目的是什么?
问问题
19429 次
3 回答
23
它旨在存储服务提供者配置文件。
服务提供者是打包为 JAR 的服务提供者接口的实现。
服务加载器发现并加载服务提供者配置文件中声明的所有实现。
配置文件是以接口的完全限定名称命名的文件,其内容是实现的完全限定名称列表。
以下是 Servlet 3.0 在 webapp 启动时使用的 javax.servlet.ServletContainerInitializer 提供程序配置文件的示例。
org.apache.jasper.servlet.JasperInitializer
org.springframework.web.SpringServletContainerInitializer
在这个例子中
- Tomcat 是服务加载器;
- javax.servlet.ServletContainerInitializer 是服务提供者接口
- 名为 javax.servlet.ServletContainerInitializer 的文件是 Service Provider 配置文件;
- org.apache.jasper.servlet.JasperInitializer 和 org.springframework.web.SpringServletContainerInitializer 是服务提供者
当tomcat启动webapp同时调用
onStartup(java.util.Set<java.lang.Class<?>> types, ServletContext context)
JasperInitializer 和 SpringServletContainerInitializer 类的方法
于 2018-10-11T09:30:46.267 回答
18
于 2010-12-28T17:06:25.887 回答
-1
在 Java 9 之前,ServiceLoader从 META-INF/services 中的文件中查找 Service 的实现,该文件具有与 Service 接口相同的完全限定名称。它包含实现的完全限定名称列表。
从 Java 9 开始,它有模块,模块有模块描述符。这些“模块”可以定义 ServiceLoader 可以加载的服务及其实现。
于 2021-08-08T10:48:00.700 回答