簡體   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