如何在Spring XML上下文中实现条件资源导入?
我想实现的功能是“动态”(即基于配置文件中定义的属性)启用/禁用子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
以扩展“ import”元素的解析和解释的行为(在importBeanDefinitionResource
方法中发生)。但是我不确定在哪里可以注册此扩展名。
回答:
现在,使用Spring 4完全可以做到这一点。
在你的主应用程序内容文件中
<bean class="com.example.MyConditionalConfiguration"/>
MyConditionalConfiguration看起来像
@Configuration@Conditional(MyConditionalConfiguration.Condition.class)
@ImportResource("/com/example/context-fragment.xml")
public class MyConditionalConfiguration {
static class Condition implements ConfigurationCondition {
@Override
public ConfigurationPhase getConfigurationPhase() {
return ConfigurationPhase.PARSE_CONFIGURATION;
}
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// only load context-fragment.xml if the system property is defined
return System.getProperty("com.example.context-fragment") != null;
}
}
}
最后,你将要包含的bean定义放在/com/example/context-fragment.xml中
以上是 如何在Spring XML上下文中实现条件资源导入? 的全部内容, 来源链接: utcz.com/qa/420979.html