【问题标题】:Java Meta-Inf ServicesJava 元信息服务
【发布时间】:2010-12-28 09:09:35
【问题描述】:

Java 中 Meta-INF 服务的目的是什么?

【问题讨论】:

    标签: java meta-inf


    【解决方案1】:

    用于存储服务提供者配置文件。

    服务提供者是一个服务提供者接口的实现,封装为 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 类的方法

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
      【解决方案3】:

      在 Java 9 之前,ServiceLoader 从 META-INF/services 中的文件中找到服务的实现,该文件具有与服务接口相同的完全限定名称。它包含实现的完全限定名称列表。

      从 Java 9 开始,它有模块,模块有模块描述符。 这些“模块”可以定义 ServiceLoader 可以加载的服务及其实现。

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-02
        • 1970-01-01
        • 2011-09-05
        相关资源
        最近更新 更多