使用Spring从自定义XML配置创建对象网络

恶魔

我有一个定义这样的网络的自定义XML配置

S1 ---- O1 ---- O2 ---- O3 ---- T1
 \
   +--- O4 ---- O5 ------------ T2
    \
S2---+- O6 --+- O7 ------------ T4
    /       /
S3-+       /
          /
S4 ------+

哪里

  • S 是某种数据源,例如Web套接字
  • 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来源属性决定应注入哪种转换器(此处StringDouble)。

要创建实例,我需要确定一个依赖关系图并开始实例化没有其他对象作为依赖关系的对象(在这种情况下为源),然后我将创建仅依赖于第一步中创建的对象的对象。以此类推。

因此,对于我的特殊用例,我基本上会重新发明诸如Spring之类的东西。在我的案例中,有没有办法利用Spring创建和连接对象?有点粗暴的技巧是将我的xml配置转换为beans.xml。但是也许有更好的使用方法BeanFactory或类似方法。还是可以直接创建Spring元模型?

我使用的是Spring 4.3,但如果有帮助,可以选择Spring 5的RC。

尤金·洛伊(Eugene Loy)

看看StaticApplicationContext在文档中指出它是:

主要用于测试。

...但是它是成熟的应用程序上下文,支持编程性bean注册。

您可以阅读特定于域的xml,并在里面基于它定义bean StaticApplicationContext

这篇博客文章可以为您提供有关如何使用StaticApplicationContext引用和构造函数args定义bean的想法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在不使用XML的情况下为Spring创建自定义的Jackson对象映射器?

对自定义CA使用网络安全配置

在Spring Security中配置自定义对象

从XML创建2D的自定义对象数组

如何在Android中使用XML作为可绘制对象来创建自定义形状?

创建自定义属性以在Spring中使用,JPA e LOG4J xml

使用Serilog XML配置指定自定义增强器

Spring Boot - 使用自定义对象数组 JSON 序列化自定义对象

使用自定义基础存储库配置Spring @DataJpaTest

配置Spring Security以使用自定义UsernamePasswordAuthenticationFilter

Spring Boot:使用自定义UserDetailsService配置AuthenticationManager

配置Spring WebFlux WebClient使用自定义线程池

使用自定义对象创建嵌套的ObservableCollections

使用自定义Json Deserializer创建新对象

使用特殊的 set 函数创建自定义 Counter 对象

JS使用self作为参数创建自定义对象

使用“控制反转”范例创建自定义对象的列表

使用Lambda创建自定义Keras Layer对象

使用动态颜色创建自定义 xml drawable

使用xml创建自定义gridView项

如何使用xml布局文件创建自定义ListView?

如何使用xml文件android创建自定义组件

使用自定义用户对象时的Spring Session Redis

使用本机查询从Spring Data返回自定义对象

使用Spring Crystal创建自定义调度程序

使用Spring DATA JPA创建自定义查询?

如何在 tensorflow 或 pytorch 中使用自定义权重初始化创建自定义神经网络

Spring boot 配置自定义sql

Spring Boot:配置自定义MethodSecurityExpressionOperations?