Spring组件扫描中的表达式

时间:2015-01-04 14:04:19

标签: java spring spring-el

如何在<context:component-scan/>标记中使用SpEL(Spring表达式语言)?有可能吗?

例如

之类的东西
<context:component-scan base-package='#{resolver.packagesToScan()}'/>

Edit : I forgot to place the component-scan tag between backsticks.

1 个答案:

答案 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);
        ...
    }
    ...
}

因此,例如,使用${...}来获取系统属性是可行的。