java模块:提供使用在webapp中不起作用

mbzjlibv  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(345)

我在做一个基于java模块的项目。我有一个包含其他模块的父项目(pom项目)、一个war模块和一些jar模块。我想知道一个模块是一个提供者,所以我在一个模块中定义了一个提供者类,它将在另一个模块中使用。在webapplication的应用程序启动期间,定义如下:

@WebListener
public class ServletContext implements ServletContextListener ..

我想获取模块提供的所有服务的列表,因此我使用了以下命令:

ServiceLoader<MyClass> services = ServiceLoader.load(MyClass.class);

不幸的是,此指令没有检索任何服务。
所以,我做了一个新项目,试着去理解我是否犯了一些错误。在新项目中,serviceloader.load可以正常工作。在本例中,我不是使用servlet来测试它,而是通过一个主类来运行它。我将这些classed放入我的原始项目中,并尝试使用主类运行它们,serviceloader.load再次正常工作。
看来 ServiceLoader.load 当我从web类调用它时不起作用, ServletContext .
我使用的是Java11,Tomcat9.0.40。
有没有人已经面对过这个问题?

nue99wik

nue99wik1#

你可以在类路径中有一个文件,就像

src
|-- main
    |-- resources
        |-- META-INF
            |-- services
                |-- org.apache.logging.log4j.util.PropertySource

替换 org.apache.logging.log4j.util.PropertySource 对于您自己的接口名,文件的内容文本是实现接口的类名,就像

org.apache.logging.log4j.util.EnvironmentPropertySource

相关问题