Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从静态工厂方法创建工厂,然后对该id调用静态工厂方法_Java_Spring_Dependency Injection - Fatal编程技术网

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

Java 从静态工厂方法创建工厂,然后对该id调用静态工厂方法,java,spring,dependency-injection,Java,Spring,Dependency Injection,我可以从静态factory对象创建对象,如下所示: <bean id="myFactory" class="com.myco.MyFactory1" factory-method="createFactory"> <constructor-arg value="aString" /> </bean> 这是无效的Java代码。它假定您的MyFactory有两个同名方法-一个static和一个非static。这是不可能的 如果您两次调用同一个静态方法,或者在

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

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

这是无效的Java代码。它假定您的
MyFactory
有两个同名方法-一个
static
和一个非static。这是不可能的

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


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

这是无效的Java代码。它假定您的
MyFactory
有两个同名方法-一个
static
和一个非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>

创建工厂

尽管如此,您也许应该重新考虑您的设计。

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

创建工厂

尽管如此,您也许应该重新考虑您的设计。

我不明白。你想要像MyFactory.createFactory().createFactory()`?是的,MyFactory.createFactory().createFactory()。我将更新问题以反映这一点。也许你需要澄清你试图实现的目标。如果createFactory创建工厂,为什么要创建另一个工厂?你不是已经有了吗?+1澄清一下,我认为抽象会更好,但当我不知道自己在做什么的时候,就没那么多了。最后一次编辑正是我想做的,我不明白。你想要像MyFactory.createFactory().createFactory()`?是的,MyFactory.createFactory().createFactory()。我将更新问题以反映这一点。也许你需要澄清你试图实现的目标。如果createFactory创建工厂,为什么要创建另一个工厂?你不是已经有了吗?+1澄清一下,我认为抽象会更好,但当我不知道自己在做什么的时候,就没那么多了。所以最后一次编辑正是我想要做的。MyFactory不能实例化一个FooFactory,它有一个创建我真正需要的对象的静态方法吗?是的,我包含了一个更新。拥有3个工厂是错误的,难道我的工厂不能实例化一个具有静态方法的FooFactory来创建我真正需要的对象吗?是的,我包含了一个关于这个的更新。拥有3个工厂是错误的这回答了这个问题,不幸的是对我来说这个问题是错误的:我现在需要询问从静态工厂方法创建工厂,然后调用该id上的静态工厂方法。按照您提供的,我仍然有一个错误。@Quaternion-如果第二个方法是静态的,为什么你需要第一种方法?我没有我更新了这个问题来反映第二种方法不是静态的。。。所以事实上改变了整个问题,所以我创造了一个新的问题,我无法改变这个问题,从那些已经解决它的人下面!(即使这不是我需要解决的问题)。这回答了这个问题,不幸的是,对我来说,这个问题是错误的:我现在需要询问从静态工厂方法创建工厂,然后在该id上调用静态工厂方法。按照您提供的,我仍然有一个错误。@Quaternion-如果第二个方法是静态的,为什么你需要第一种方法?我没有我更新了这个问题来反映第二种方法不是静态的。。。所以事实上改变了整个问题,所以我创造了一个新的问题,我无法改变这个问题,从那些已经解决它的人下面!(即使这不是我需要解决的问题)。