繁体   English   中英

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

[英]Create factory from static factory method, then call static factory method on that id

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

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

现在,我想使用id“ myFactory”调用其 静态 “ createFactory”方法。

在Java中类似:

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

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

如果您要两次调用同一个静态方法,或者在另一个对象上调用一个方法,那么,您可以轻松地仅调用一次它/将这两次调用合并到一个createObjectFactory()

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

您可以在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>

但是,您也许应该重新考虑您的设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM