我想实现的功能是“动态”(即基于配置文件中定义的属性)启用/禁用子Spring XML上下文的导入的能力。
我想像这样:
<import condition="some.property.name" resource="some-context.xml"/>
解析属性的位置(为布尔值),如果为true,则导入上下文,否则不导入。
到目前为止,我的一些研究:
<myns:import condition="some.property.name" resource="some-context.xml"/>
这种方法的问题在于,我不想复制Spring中的整个资源导入逻辑,而且对我来说,执行此操作所需的委托并不明显。
DefaultBeanDefinitionDocumentReader
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中
参见JavaDoc中的@Conditional