Получить новые прототипы на синглтон заводе - PullRequest
1 голос
/ 03 февраля 2012

Я создал тип с именем HelperFactory.В контексте Spring он выглядит следующим образом:

<bean id="HelperFactory" class="helper.HelperFactory">
    <property name="createHelper" ref="createHelperBean" />
    <property name="editHelper" ref="editHelperBean" />
    <property name="deleteHelper" ref="deleteHelperBean" />
</bean>

Все упомянутые bean-компоненты являются прототипами.

У HelperFactory есть метод с именем determinteHelper(HelperDto).Этот метод должен возвращать новый экземпляр соответствующего Helper.

Но поскольку HelperFactory является одиночным, все ссылки Helper также устанавливаются только один раз.Как я могу получить новый экземпляр Helper каждый раз, когда я вызываю - скажем - getCreateHelper()?


Ther Helper bean-компоненты слишком объявлены в контексте XML и в них вставлены некоторые другие bean-компоненты.


В настоящее время я внедряю имена Бинов в HelperFactory и звоню затем getBean(String), но я ищу что-то лучшее, чем это.

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Вот как мы это сделали на моем проекте:

В фабричном классе укажите метод как такой:

public Object createObject(){
      return null;
}

В вашем бобе сделайте следующее:

<bean id="blah" class="blahblah">
    <lookup-method name="createObject" bean="myPrototypeBean"/>
</bean>

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

Ознакомьтесь с разделом 3.3.4.1. Lookup method Injection Spring Beans

0 голосов
/ 03 февраля 2012

Извлечено из документации Spring:

При определении компонента, который должен быть создан с использованием метода статической фабрики, вместе с атрибутом class, который указывает класс, содержащий метод статической фабрики, другой атрибут с именем factory-methodнеобходимо указать имя самого фабричного метода.Spring ожидает, что сможет вызвать этот метод (с необязательным списком аргументов, как описано ниже) и получить живой объект, который с этого момента обрабатывается так, как если бы он был создан с помощью конструктора.Одним из применений такого определения компонента является вызов статических фабрик в унаследованном коде.

Ниже приведен пример определения компонента, который указывает, что компонент должен быть создан путем вызова фабричного метода.Обратите внимание, что в определении не указан тип (класс) возвращаемого объекта, а только класс, содержащий метод фабрики.В этом примере createInstance должен быть статическим методом.

  <bean id="exampleBean"
      class="examples.ExampleBean2"
      factory-method="createInstance"/>
...