Я видел две различных стратегий инъекционных объектов в пластах (в моем случае с DAO)
1.
@In(create="true")
private WeirdDao weirdDao;
.. .
@Name("weirdDao")
public class WeirdConcreteDao implements WeirdDao
2.
@In
private WeirdDao weirdDao;
...
@Name("weirdConcreteDao")
public class WeirdConcreteDao implements WeirdDao
...
components.xml
<factory auto-create="true" name="weirdDao" value="#{weirdConcreteDao}"/>
Моя теория состоит в том, что во втором примере Шов заботится о создании объекта и (надеюсь) управляет чем-то вроде пула его экземпляров.
Есть ли какое-либо официальное объяснение pro/con использования этих двух?
Заранее благодарим!Что такое преимущество постройки на заводе в пластах 2
ответ
Преимущество с точки зрения производительности в этом случае не так важно. Но проблема довольно философская.
Factory Pattern - хорошо известный образец дизайна. В Seam мы обычно используем factory method
для создания экземпляров классов Entity
или Domain
. Они обычно хранят данные и не имеют никакой обработки или бизнес-логики.
Для инъекции компонентов, таких как Service или DAO, мы обычно не используем фабрику.
Основная причина заключается в том, что создание бланков типа Service или DAO не имеет состояний или зависит от каких-либо состояний. Так почему бы мне взять головную боль для написания фабричного метода или конфигурации для этого, где я могу легко передать ответственность за контейнер.
Но в случае Entity
или Domain
тип beans может различаться в зависимости от состояния. Например, вам нужно создать супруг боба в зависимости от пользователя авторизованы. Для этого вы пишете фабричный метод для создания супруги фасоли в зависимости от пользователя. Обычно вы не зависите от контейнера.
Надеюсь, это поможет!