从静态工厂方法创建工厂,然后在该id上调用静态工厂方法

时间:2010-12-17 21:25:59

标签: java spring dependency-injection

我可以从静态工厂对象创建一个对象,如下所示:

<bean id="myFactory" class="com.myco.MyFactory1" factory-method="createFactory">
  <constructor-arg value="aString" />
</bean>

现在我想使用id'myFactory'来调用它的 static 'createFactory'方法。

在java中:

ObjectFactory objectFactory = MyFactory.createFactory().createFactory(); //Last createFactory method returns type ObjectFactory

2 个答案:

答案 0 :(得分:2)

这是无效的Java代码。假设您的MyFactory有两个名称相同的方法 - 一个static和一个非静态方法。这是不可能的。

如果你两次调用相同的静态方法,或者在另一个对象上调用一个方法 - 那么你只需要调用一次/将两个调用合并到一个,比如createObjectFactory()

此外,创建一个因素反过来创建一个工厂反过来创建另一个工厂似乎很奇怪。听起来像一个糟糕的设计(过度设计)。

答案 1 :(得分:2)

您可以在bean实例上调用工厂方法,但在这种情况下,工厂方法不能是静态的。

<bean id="myFactory2" factory-bean="myFactory" factory-method="createFactory">

</bean>

无论如何,我同意其他人的意见。您需要详细说明要求。如果您的第一个com.myco.MyFactory1返回com.myco.MyFactory1的实例,则调用其createInstance方法没有多大意义。返回同一个类时,将调用相同的静态方法。

如果你的第一个工厂com.myco.MyFactory1返回不同类的实例,你可以使用上面的代码来调用它们的工厂方法。但请记住,在这种情况下,它们必须是非静态的。

更新:

可以通过在另一个bean实例上调用静态方法来创建新实例,如下所示。

 <bean id="myFactory2" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="targetObject"><ref local="myFactory"/></property>
   <property name="targetMethod"><value>createFactory</value></property>
 </bean>

然而你应该重新考虑你的设计。