如何在Spring XML上下文中实现条件资源导入?

2023-12-02

我想要实现的是“动态”(即基于配置文件中定义的属性)启用/禁用子 Spring XML 上下文的导入的能力。

我想象这样的事情:

<import condition="some.property.name" resource="some-context.xml"/>

当属性被解析(为布尔值)时,当为 true 时,上下文被导入,否则不是。

到目前为止我的一些研究:

  • 编写自定义 NamespaceHandler (和相关类),以便我可以在自己的命名空间中注册自己的自定义元素。例如:<myns:import condition="some.property.name" resource="some-context.xml"/>

    这种方法的问题是,我不想从 Spring 复制整个资源导入逻辑,而且对我来说,我需要委托什么来执行此操作并不明显。

  • 覆盖DefaultBeanDefinitionDocumentReader扩展“导入”元素解析和解释的行为(这发生在importBeanDefinitionResource方法)。但是我不确定在哪里可以注册这个扩展。


在 Spring 4 之前,使用标准 Spring 组件最接近的是:

<import resource="Whatever-${yyzzy}.xml"/>

where ${xyzzy}从系统属性中插入属性。 (我使用上下文加载器类的一个 hacky 自定义版本,该类在开始加载过程之前将其他位置的属性添加到系统属性对象。)

但您也可以避免导入大量不必要的东西……并使用各种技巧只导致必要的 bean 被实例化。这些技巧包括:

  • 占位符和属性替换
  • 使用新的 Spring 表达式语言选择不同的 bean,
  • 目标名称中带有占位符的 bean 别名,
  • 惰性 bean 初始化,以及
  • 智能豆工厂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Spring XML上下文中实现条件资源导入? 的相关文章

随机推荐