- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
拥有这个 Maven 项目结构
root pom
---> ModuleCore/pom.xml
---> ModuleA/pom.xml
---> ModuleB/pom.xml
---> ModuleC/pom.xml
---> ModuleD/pom.xml
其中模块 A、B、C 和 D
与模块 Core
具有依赖关系,并且假设 ModuleA
与 具有依赖关系ModuleB
和 ModuleB
与 ModuleC
具有依赖关系。
通过这种依赖分布,我们同意:
如果我修改
ModuleCore
必须版本
ModuleA/pom.xml
ModuleB/pom.xml
ModuleC/pom.xml
ModuleD/pom.xml
如果我更新ModuleD
,则无需进行版本控制。
如果我更新ModuleC
必须版本
ModuleA/pom.xml
ModuleB/pom.xml
好吧,在整个解释之后,我想要实现的是没有模块之间有相互依赖关系,而只有 ModuleCore
我的第一个方法是创建接口(interface)作为模块之间通信的契约,并将该契约放入moduleCore
中,然后通过reflection
在中查找来调用实现>classpath
用于实现该接口(interface)并调用。但我对反射看起来很糟糕感到不太舒服,
有人可以给我一些建议,如何应用通用闭包原则而不将所有代码移至 ModuleCore 并制作一个整体吗?
我使用反射的第一种方法的代码示例。
@Test
void dependencyWithModuleA() {
Reflections reflections = new Reflections("com.modularization.ccp");
Optional<Optional<?>> any = reflections.getSubTypesOf(MainA.class)
.stream()
.map(clazz -> {
try {
MainA mainA = clazz.newInstance();
return Optional.of(mainA.main());
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return Optional.empty();
}).findAny();
if (any.isPresent() && any.get().isPresent()) {
System.out.println(any.get().get());
}
}
需要澄清的是,它将在服务启动时完成反射调用,并且将使用单例模式保存实例引用以进行 future 调用,以避免性能问题。
请对这种方法提出所有批评,我们非常欢迎。
问候。
最佳答案
从问题的标签来看,这个问题似乎仅限于 Java 8。使用这个假设......
看看 ServiceLoader JDK 中内置的类。您可以在每个 ModuleA-D
jar 中的 META-INF/package.MainA
文件中声明 MainA
的实现。然后找到这些实现:
ServiceLoader.load(MainA.class).iterator()
Java 9 的情况发生了一些变化。现在 JDK9 模块可以直接声明其服务,但仍然可以通过 ServiceLoader
发现它们,因此这种方法也具有一定程度的面向 future 的能力。
显然,在 JDK 之外还有很多解决方案,例如Spring 有 Autowiring ,或者 ApplicationContext.getBeansOfType(Class)
,Java EE 有 javax.enterprise.inject.Instance
,还有 OSGi 等等...
关于java - 带反射的模块化共闭包原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49699472/
我创建了一个 View (称为 masterView),CGRect 的 x=160、y=186、width=1600、height=380。该 View 包含 5 个 subview ,每个 sub
我是 R 的新手,目前正在处理边缘列表形式的协作数据,该列表具有 32 列和大约 200.000 行。我想根据国家之间的相互作用创建一个(共)现矩阵。但是,我想通过对象的总数来计算交互次数。 期望结果
考虑以下发展: Require Import Relation RelationClasses. Set Implicit Arguments. CoInductive stream (A : Typ
我正在玩弄这种语言来开始学习,我对递归定义的工作原理感到困惑。 例如,让我们采用三角形数的序列(TN n = sum [1..n]) 提供的解决方案是: triangularNumbers = sca
我正在尝试获取“总分钟数”值中的 PHP“DateInterval”值。如何获得?似乎简单格式(“%i 分钟”)不起作用? 示例代码如下: $test = new \DateTime("48 hour
我有这个脚本可以通过电子邮件自动发送负载信息: if(confirm('', 'Are you sure?') == true) { // enviar mails var emails = new
我有一些数据要查询。该表由两列组成 - 一个唯一 ID 和一个值。我想计算每个唯一值出现的次数(这可以通过 COUNT 和 GROUP BY 轻松完成),但我希望能够对其进行计数。所以,我想看看有多少
当我在我的 Java 代码上运行 PMD 时,它显示的错误消息之一是“类 STWeb 具有 20 的圈复杂度”。通常我的java类是这样的 public class STWeb implements
尝试在打印时在页面底部显示第 1 页,共 10 页... 第 1 页,共 0 页 正在显示,因此计数器(页面)似乎无法正常工作。我正在使用 Chrome,所以 @pages { ... 也不起作用。有
我在尝试运行单元测试用例时收到 Executed 0 of 0 ERROR 错误。我遵循了针对此问题提到的几个解决方案,但我仍然遇到相同的错误。 尝试过: 删除 angular-scenario 文件
我们有一个应用程序,可以在运行时生成大约 100 个动画,并将它们全部添加到单个 Storyboard 中然后播放。问题是动画速度非常慢。进行动画处理的对象是形状和样条线,并且在后端完成大量计算以生成
我正在为数学演示编写凯撒加密代码。今天,我一直在为我的演讲编写代码。早上这个代码就开始工作了。但现在在学校,我遇到了一个异常(exception),我认为 for 超出了我的符号表的长度。 异常(ex
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
我有一张带有 4 个标签的表格,效果很好。当我使用也能正常工作的搜索栏时,表格只显示两个标签: - (void)viewDidLoad { [super viewDidLoad]; NSS
我正在使用 iText 在我的 Java EE 应用程序中生成 PDF 文档。 PDF 文件的编码驻留在 JSP 中。 我想在每个页脚中实现以下页面格式, REF:XXXXXXX 第 X 页,共第 Y
我试图找出(出于好奇)哪个线程实际调用了单例构造函数。好吧,我完全理解每次执行测试程序时线程都会不同,只是想在实用上检查是否相同。我试过 dumpStack() printStackTrace() g
我在工作时遇到了一些麻烦。这可能真的很简单,但我让它变得比可能的更困难。所以我有一个包含 3 组 UL 的 div。 代码如下: content here content here c
我有一个问题,当网格为空时,为什么它显示 Page 1 of 0 不能是 Page 1 of 1 或更合理的东西吗? 我的代码 var xml=client.responseText;
我想将 Crashlytics 添加到我的项目中,我根据 Fabric Mac 应用程序制作了所有内容,现在我停留在 Step 2 of 2 when verifying installation 我
我正在使用 qt 从 html 代码生成一个 pdf 文件: QTextDocument *document = new QTextDocument(); document->setHtml(html
我是一名优秀的程序员,十分优秀!