Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以限制JPMS中模块提供的服务的使用?_Java_Java 9_Java Module - Fatal编程技术网

Java 是否可以限制JPMS中模块提供的服务的使用?

Java 是否可以限制JPMS中模块提供的服务的使用?,java,java-9,java-module,Java,Java 9,Java Module,假设我们有JPMS模块-A,B,C等等。A定义了一些服务A.spi.SomeService,所有这些模块都实现了这个服务。例如,模块B实现了此服务B.spi.SomeServiceImpl,因此,在B的模块信息中,我们有: provides a.spi.SomeService with b.spi.SomeServiceImpl; 我们是否可以使提供模块B、C等的A的A服务与所有其他模块一样,即使它们提供A.spi。某些服务也无法使用它?您只能将包导出到某些模块: module A {

假设我们有JPMS模块-
A
B
C
等等。
A
定义了一些服务
A.spi.SomeService
,所有这些模块都实现了这个服务。例如,模块
B
实现了此服务
B.spi.SomeServiceImpl
,因此,在
B
的模块信息中,我们有:

provides a.spi.SomeService with b.spi.SomeServiceImpl; 

我们是否可以使提供模块
B
C
等的
A
A
服务与所有其他模块一样,即使它们提供
A.spi。某些服务
也无法使用它?

您只能将包导出到某些模块:

module A {
  exports a.spi to B
}

确认
为TypeName提供TypeName{,TypeName},您不能将其公开给一组封闭的模块,类似于在
exports PackageName[to ModuleName{,ModuleName}]中导出包。所以,只需将您提供的包导出/打开到特定的模块,这样做不起作用吗?还是一个循环?完整的描述将有助于更好地分析。我们是否可以让提供模块B的服务仅对模块A可用。。如果您需要
A
B
提供的实现。在我看来,这将是一种循环依赖。什么用例驱动了这一点?为什么
A
本身不能实现,并且
导出
以供
B
重复使用。或者您的问题可以简化为“是否可以限制使用模块提供的服务?”?关于重命名,为了回答这个问题,您可以将其命名为
a.spi.SomeServiceProvider
b.SomeServiceProviderImpl
(但这在这里并不重要。)@Naman我有以下情况-一个模块有服务接口,而这个模块是服务消费者。所有其他模块都提供此服务。我希望只有模块A可以使用提供的服务。这个解决方案是绝对错误的。您只允许一个模块(模块B)访问
a.spi
。问题是N个模块可以实现模块a的接口,但只有模块a可以使用实现的服务。