Создайте фабрику из статического метода фабрики, затем вызовите статический метод фабрики для этого идентификатора - PullRequest
0 голосов
/ 18 декабря 2010

Я могу создать объект из статического объекта фабрики следующим образом:

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

Теперь я хочу использовать идентификатор myFactory для вызова его статического метода createFactory.

В Java что-то вроде:

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

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Вы можете вызывать фабричные методы в экземплярах bean-компонентов, но в этом случае фабричный метод не должен быть статическим.

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

</bean>

В любом случае, я согласен с остальными.Вам необходимо уточнить требование подробно.Если ваш первый com.myco.MyFactory1 возвращает экземпляр com.myco.MyFactory1, нет смысла вызывать его метод createInstance.Когда возвращается тот же класс, будет вызван тот же статический метод.

Если ваша первая фабрика com.myco.MyFactory1 возвращает экземпляры разных классов, вы можете использовать приведенный выше код для вызова фабричных методов этих,Но помните, что в этом случае они должны быть нестатичными.

ОБНОВЛЕНИЕ:

Можно создать новый экземпляр, вызвав статический метод для другого экземпляра компонента следующим образом.

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

Тем не менее, возможно, вам следует переосмыслить свой дизайн.

2 голосов
/ 18 декабря 2010

Это недопустимый код Java.Предполагается, что ваш MyFactory имеет два метода с одинаковым именем - один static и один нестатический.И это невозможно.

В случае, если вы вызываете один и тот же статический метод дважды или вызываете метод для другого объекта - ну, вы можете легко вызвать его только один раз / объединить два вызова в, скажем,createObjectFactory()

Более того, кажется странным создавать фактор, который, в свою очередь, создает фабрику, которая, в свою очередь, создает другую фабрику.Похоже, плохой дизайн (овердизайн).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...