gpt4 book ai didi

java - Spring:获取 FactoryBean 对象而不是 FactoryBean.getObject()

转载 作者:IT老高 更新时间:2023-10-28 13:58:49 25 4
gpt4 key购买 nike

小问题:如果我有实现 FactoryBean 接口(interface)的类,我如何从 FactoryBean 对象本身而不是 FactoryBean.getObject() 中获取?

长问题:我必须使用几乎不使用 FactoryBean 接口(interface)的第三方 Spring 库。现在我总是必须配置 2 个 bean:

<!-- Case 1-->
<bean id="XYZ" class="FactoryBean1" scope="prototype">
<property name="steps">
<bean class="FactoryBean2">
<property name="itemReader" ref="aName"/>
</bean>
</property>
</bean>

<bean id="aName" class="com.package.ClassName1" scope="prototype">
<property name="objectContext">
<bean class="com.package.ABC"/>
</property>
</bean>

<!-- Case 2-->
<bean id="XYZ2" class="FactoryBean1" scope="prototype">
<property name="steps">
<bean class="FactoryBean2">
<property name="itemReader" ref="aName2"/>
</bean>
</property>
</bean>

<bean id="aName2" class="com.package.ClassName1" scope="prototype">
<property name="objectContext">
<bean class="com.package.QWE"/>
</property>
</bean>

实际上,名称为“XYZ”(与“XYZ2”相比)的 bean 的定义永远不会改变,但由于工厂性质,我必须复制每个配置的代码。名称为“aName”的 bean 的定义始终是新的(即每个配置都有自己的 objectContext 值)。

我想简化配置有一个工厂 bean(删除“XYZ2”并摆脱“aName”的链接):

<bean id="XYZ" class="FactoryBean1" scope="prototype">
<property name="steps">
<bean class="FactoryBean2"/>
</property>
</bean>

<bean id="aName" class="com.package.ClassName1" scope="prototype">
<property name="objectContext">
<bean class="com.package.ABC"/>
</property>
</bean>


<bean id="aName2" class="com.package.ClassName1" scope="prototype">
<property name="objectContext">
<bean class="com.package.QWE"/>
</property>
</bean>

不幸的是,这并不像我想象的那么简单。我想在运行时将工厂(即示例中的 XYZ bean)与必要的对象(即“aName”、“aName2”)粘合起来。该方法不起作用,因为当我向 Spring 询问 FactoryBean 对象时,它返回给我 FactoryBean.getObject() 由于缺少 itemReader 值,当时无法实例化。

我希望 SpringSource 预见到我的情况,我可以在运行时调用一些家庭“ Hook ”FactoryBean.getObject() 以提供所有必要的属性。

另一个让我有点不安的复杂性是工厂链(Factory1 从 Factory2 获取一个我必须在运行时“ Hook ”的对象)。

任何想法都会受到赞赏。

最佳答案

它是 &(和号),而不是 At-symbol,请参阅 Spring Framework 文档:Customizing instantiation logic using FactoryBeans

<property name="factoryBean" ref="&amp;theFactoryBean" />

关于java - Spring:获取 FactoryBean 对象而不是 FactoryBean.getObject(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com