如何在<context:component-scan/>
标签中使用SpEL(Spring表达式语言)?可能吗?
例如,像
<context:component-scan base-package='#{resolver.packagesToScan()}'/>
Edit :
I forgot to place the component-scan tag between backsticks.
不幸的是,这似乎不可能 - 并且有充分的理由。 component-scan
是XML配置的一部分,它创建包含所有bean的Spring上下文。参考指令中的bean,告诉Spring如何创建那些首先是相当循环的。
但是,根据消息来源,“更简单”的占位符可以包含在属性中,而不是“复杂的”Spring EL:
public class ComponentScanBeanDefinitionParser implements BeanDefinitionParser {
...
public BeanDefinition parse(Element element, ParserContext parserContext) {
String basePackage = element.getAttribute(BASE_PACKAGE_ATTRIBUTE);
basePackage = parserContext.getReaderContext().getEnvironment().resolvePlaceholders(basePackage);
...
}
...
}
因此,例如,使用${...}
来获取系统属性是可行的。