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

Java Spring:获取FactoryBean对象而不是FactoryBean.getObject(),java,spring,factory,spring-batch,Java,Spring,Factory,Spring Batch,简短问题:如果我有推动FactoryBean接口的类,我如何从FactoryBean对象本身而不是从FactoryBean.getObject()获取 长问题:我必须使用基于第三方Spring的库,它几乎不使用FactoryBean接口。现在,我必须始终配置2个bean: <!-- Case 1--> <bean id="XYZ" class="FactoryBean1" scope="prototype"> <property name="steps"&g

简短问题:如果我有推动FactoryBean接口的类,我如何从FactoryBean对象本身而不是从FactoryBean.getObject()获取

长问题:我必须使用基于第三方Spring的库,它几乎不使用FactoryBean接口。现在,我必须始终配置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”的链接):


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

我希望SpringSource预见到我的情况,我可以在运行时调用某个Home“hook”FactoryBean.getObject()来提供所有必要的属性

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


任何想法都将受到欢迎。

您可以使用spring配置中的
&
语法获得工厂bean本身:

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

与之相反:

<property name="createdBean" ref="theFactoryBean" />

它是
&
(与符号),而不是At符号,请参见Spring框架文档:



你真的检查过了吗?我尝试过这种方法,但失败了,出现了如下异常:由:org.xml.sax.saxpasseeption引起:对实体“theFactoryBean”的引用必须以“;”结尾分隔符。@wax:谢谢,你当然是对的,XML必须正确转义。我已经纠正了,只是不要在EL表达式中尝试这个。我有一个bug:){&;theFactoryBean}不起作用:(它不象你描述的那样起作用。正确答案如下。
<property name="createdBean" ref="theFactoryBean" />
<property name="factoryBean" ref="&amp;theFactoryBean" />