我见过两种不同的在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正在处理对象的创建,并且(希望)控制它的实例池。
是否对这两者的使用情况有任何正式的解释?
提前谢谢!
答案 0 :(得分:1)
在这种情况下,在性能方面的优势并不那么重要。但问题是相当哲学的。
Factory Pattern是众所周知的Creational设计模式。在Seam中,我们通常使用factory method
来创建Entity
或Domain
类型类的实例。它们通常包含数据,没有任何处理或业务逻辑。
为了注入像Service或DAO这样的bean,我们通常不使用factory。
主要原因是,Service或DAO类型bean的创建不保持状态或依赖于任何状态。那么为什么我会为此编写工厂方法或配置的头痛,我可以轻松地将责任转移到容器。
但是在Entity
或Domain
类型的情况下,bean可能因州而异。例如,您需要根据登录的 用户 创建 配偶 bean。为此,您需要编写一个根据 用户 创建 配偶 bean的工厂方法。你通常不依赖于容器来做到这一点。
希望这有帮助!