如何在<context:component-scan/>
标记中使用SpEL(Spring表达式语言)?有可能吗?
例如
之类的东西<context:component-scan base-package='#{resolver.packagesToScan()}'/>
Edit :
I forgot to place the component-scan tag between backsticks.
答案 0 :(得分:1)
不幸的是,这似乎是不可能的-这是有充分理由的。
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);
...
}
...
}
因此,例如,使用${...}
来获取系统属性是可行的。