Spring组件扫描中的表达式

问题描述 投票:2回答:1

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

例如,像

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

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

java spring spring-el
1个回答
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);
        ...
    }
    ...
}

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

© www.soinside.com 2019 - 2024. All rights reserved.