0

我正在使用基于引用的 NamespaceHandler 和 BeanDefinitionParser ,我想将 Spel 与 bean 引用一起使用。问题是,由于我们处于生命周期阶段,我无法在 NamespaceHandler 或 BeanDefinitionParser 中访问应用程序上下文,因此当我的 BeanDefinitionParser 解释 Spel 表达式时,它没有 BeanFactory 可用于使用 bean 引用评估 spel。知道如何处理吗?如果 SpEL 放置在 bean 属性上,我可以保留它并让 spring 解释它,但不幸的是,SpEL 位于 XML 中,将被解组为用于构造 bean 属性的对象模型。

已编辑:基于 Gary Russell 的建议

<bean id="securityDecriptor" class="com.fg.edee.integration.descriptor.security.SecurityDescriptorImpl">
    <property name="securityModuleName" value="security"/>
    <property name="securityModuleDescription" value="security"/>
</bean>

<bean id="moduleDescription" class="com.fg.edee.integration.descriptor.schema.ModuleDescription">
    <property name="treeDescriptor">
        <mtd:treeDescriptor>
            <mtd:security rights="W" moduleId="#{ securityDecriptor.securityModuleId }" moduleName="#{ securityDecriptor.securityModuleName }">
                <mtd:securityIdentifier identifierId="users" identifierName="users"/>
            </mtd:security>
        </mtd:treeDescriptor>
     </property>
</bean>
4

1 回答 1

0

您无法在解析器中评估它们;在上下文的生命周期中还为时过早。有几种方法 - 例如,让解析器为在上下文初始化期间创建最终对象的工厂 bean 构建定义。

于 2013-08-21T13:39:36.347 回答