我正在使用基于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>
答案 0 :(得分:0)
您无法在解析器中评估它们;在上下文的生命周期中还为时过早。有几种方法 - 例如,让解析器为工厂bean构建一个定义,在上下文初始化期间创建最终对象。