【发布时间】:2011-03-03 09:55:21
【问题描述】:
我想要实现的是能够“动态地”(即基于配置文件中定义的属性)启用/禁用子 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方法中发生)。但是我不确定在哪里可以注册这个扩展。
【问题讨论】:
-
与其做条件导入,不如使用类路径扫描,只部署需要的配置?我发现条件导入更复杂,并且在查看已部署的应用程序时更难以确定配置/未配置的内容。
-
如何定义“所需配置”?我们有部分功能很好地模块化并在加载上下文时自动激活(白板模式)。但是我们需要一种机制来动态地(阅读:在安装/配置时)激活和停用这些功能。它是一种轻量级的插件系统。