Seam 2内置工厂的优势是什么?

时间:2013-12-17 23:55:29

标签: java seam seam2

我见过两种不同的在Seam中注入对象的策略(在我的例子中是一个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}"/>

我的理论是,在第二个例子中,Seam正在处理对象的创建,并且(希望)控制它的实例池。
是否对这两者的使用情况有任何正式的解释?
提前谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,在性能方面的优势并不那么重要。但问题是相当哲学的。

Factory Pattern是众所周知的Creational设计模式。在Seam中,我们通常使用factory method来创建EntityDomain类型类的实例。它们通常包含数据,没有任何处理或业务逻辑。

为了注入像Service或DAO这样的bean,我们通常不使用factory。

主要原因是,Service或DAO类型bean的创建不保持状态或依赖于任何状态。那么为什么我会为此编写工厂方法或配置的头痛,我可以轻松地将责任转移到容器。

但是在EntityDomain类型的情况下,bean可能因州而异。例如,您需要根据登录的 用户 创建 配偶 bean。为此,您需要编写一个根据 用户 创建 配偶 bean的工厂方法。你通常不依赖于容器来做到这一点。

希望这有帮助!

相关问题