使用NamespaceHandler和BeanDefinitionParser时,Spel bean引用不可用

时间:2013-08-21 13:16:04

标签: java spring spring-el

我正在使用基于reference的NamespaceHandler和BeanDefinitionParser,我想将Spel与bean引用一起使用。问题是,由于我们所处的生命周期阶段,我无法访问NamespaceHandler或BeanDefinitionParser中的app上下文,因此当我的BeanDefinitionParser解释Spel表达式时,它没有BeanFactory可用于使用bean引用来评估spel。知道怎么处理这个吗?如果将SpEL放在bean属性上,我可以保留它并对其进行解释,但不幸的是,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>

1 个答案:

答案 0 :(得分:0)

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