【发布时间】:2017-08-31 10:30:28
【问题描述】:
我有一个自定义 XML 配置,定义了一种类似这样的网络
S1 ---- O1 ---- O2 ---- O3 ---- T1
\
+--- O4 ---- O5 ------------ T2
\
S2---+- O6 --+- O7 ------------ T4
/ /
S3-+ /
/
S4 ------+
在哪里
-
S是某种数据源,例如网络套接字 -
O是处理数据的算子 -
T是目标或数据接收器
这些元素用 xml 块表示,如下所示:
<source name="S1" address="ws://example/1" type="websocket" dataType="double" />
<operator name="O6" type="threshold">
<input name="S1"/>
<input name="S2"/>
<input name="S3"/>
<property name="threshold" value="10.34" />
<property name="window" value="10.0" />
</operator>
<sink name="T1" type="database">
<input name="O3"/>
</sink>
依赖项是构造函数参数。我的示例运算符 O6 将具有这样的构造函数:
class ThresholdOperator extends Operator<Boolean> {
public ThresholdOperator(
String name, // "O6"
List<DataSource> sources, // [S1, S2, S3]
double threshold, // 10.34
double window) { // 10.0
...
这个类可能有多个具有不同构造函数参数的实例。一个类可能有多个构造函数。基类的类型参数是输出类型。
type 属性决定了必须实例化的具体类。源的dataType 属性决定了应该注入哪种类型的转换器(这里是String 到Double)。
要创建实例,我需要找出一个依赖关系图并开始实例化对象,而我的图中没有其他对象作为依赖项(在本例中为源),然后我将创建仅依赖于在第一步等等。
所以我基本上会为我的特殊用例重新发明类似 Spring 的东西。在我的情况下,有没有办法利用 Spring 创建和连接对象?一个有点粗略的技巧是将我的 xml 配置转换为 beans.xml。但也许有更好的方法使用BeanFactory 等。还是可以直接创建 Spring 元模型?
我正在使用 Spring 4.3,但 Spring 5 的 RC 可能是一个选择,如果它有帮助的话。
【问题讨论】:
-
我添加了另一种可能对您的情况有用的解决方案。查看我帖子的更新。
-
您可能想看看apache-camel,因为您似乎为某些端点构建了一些处理路线和指令。