我使用了一个从CodeFx的书和代码示例中衍生出来的工作示例(此处),我把它剥离到了本质上。
三者在Github上都可以看到 此处.
我们的目标是让Monitor模块使用Mock Observed服务,这两个模块不应该耦合,因为Mock服务可以在运行时被另一个服务(使用)取代。这两个模块不应该被耦合,因为Mock服务可以在运行时被另一个服务所取代(用 更新4J 例如,下载并在模块路径上添加这个新服务)。)
但我卡在了一个基本的层面上。
在Monitor模块中,这一行返回一个空的List:no ServiceObserverFactory
已被发现。
List<ServiceObserverFactory> observerFactories = ServiceLoader
.load(ServiceObserverFactory.class).stream()
.map(Provider::get)
.collect(toList());
我看到从 codefx的readme 可能是由于Maven构建的原因:Monitor模块没有 "看到 "其他两个模块。我应该在Maven中添加一个对它们的引用,但如果我这样做,就会重新引入一些耦合,使我无法在运行时添加另一个服务实现。但如果我这样做,就会重新引入一些耦合,使我无法在运行时添加另一个服务实现。
有什么方法可以让这个代码示例在不重新引入任何紧密耦合的情况下工作?
最后说明:我看到了""的概念。层次"其他地方:是这样的吗?]
模块层都需要涉及。给出了一个完整的工作示例 在这个代码库中 作者:Paul Bakker(他们的书的配套网站:"Java 9 Modularity")。