我在做一个基于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。
有没有人已经面对过这个问题?
1条答案
按热度按时间nue99wik1#
你可以在类路径中有一个文件,就像
替换
org.apache.logging.log4j.util.PropertySource
对于您自己的接口名,文件的内容文本是实现接口的类名,就像