[英]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.