在我的一些项目中,我使用双分派机制在运行时向域模块(强化您的域:双重调度模式)提供我的基础设施模块的“视图”。上面我所称的“模块”只是单独的jar文件,其中来自service.jar->domain.jar的依赖仅在编译时强制执行。如果我将我的服务和域定义为“真正的”java 9模块,我能让它在java-9上工作吗?
module domain
L Fee.java
L Payment recordPayment(double, BalanceCalculator)
L BalanceCalculator.java
module service
L BalanceCalculatorImpl.java // implements BalanceCalculator
L double calculate(Fee fee) //call fee.recordPayment(amount,this)发布于 2016-09-30 06:37:36
是的,那是可能的。以下是一些需要考虑的事项:
Fee。可能是每个人,但至少是至。BalanceCalculatorImpl必须实现访问 BalanceCalculator,因为它实现了它。BalanceCalculatorImpl并将其传递给Fee,这在域中是不可能发生的,否则就会创建循环依赖关系。BalanceCalculator的代码,即使是在域中,都可以获得它的所有实现。考虑到所有这些因素,这两个模块声明可能是这样的:
module com.example.domain {
// likely some requires clauses
// export packages containing Fee and BalanceCalculator
exports com.example.domain.fee;
exports com.example.domain.balance;
}
module com.example.service {
requires public com.example.domain;
// likely some more requires clauses
// expose BalanceCalculatorImpl as a service,
// which makes it unnecessary to export the containing package
provides com.example.domain.balance.BalanceCalculator
with com.example.service.balance.BalanceCalculatorImpl;
}然后,每个喜欢使用BalanceCalculator的模块都可以使用uses com.example.domain.balance.BalanceCalculator在其模块声明中声明它,并使用ServiceLoader获取该模块的实例。
您可以在我创建了一个演示中找到更实用的模块系统应用程序(特别是服务)。
(注:答案是在这次交换之后修改的。)
https://stackoverflow.com/questions/39771709
复制相似问题