简短的问题:
如果我有一个驱动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的定义永远不会更改,但由于工厂性质,我必须为每个配置复制代码。
名为“a name”的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预见到我的情况,我可以在运行时调用一些home“hook”factrybean.getobject()来提供所有必要的属性。
另一个让我有点不安的复杂性是工厂链(Factory1从Factory2获取一个对象,我必须在运行时“钩住”)。
任何想法都会受到赞赏。