我们将Spring + JPA用于Web应用程序。我的团队在讨论如何在注入EntityManagerFactory
的GenericDAO
(基于泛型的东西对AppFuse中提供的线DAO,我们不使用JpaDaosupport
过的注射某种原因)EntityManage
r。我们正在使用“应用程序管理的持久性”。
反对注入a的论点EntityManagerFactory
是它太重了,因此不是必需的,这EntityManager
就是我们需要的。而且,由于Spring将为每个Web请求创建一个DAO的新实例(我对此表示怀疑),因此不会有任何并发问题,因为在同一EntityManager
实例中,两个线程共享该线程。
注入EFM的理由是,对于拥有工厂的人来说,这始终是一个很好的实践。
我不确定哪种方法最好,请问有人能启发我吗?
Spring docs 在这里详细说明了注入EntityManagerFactory和EntityManager的优缺点,我不确定是否可以对此进行改进。
话虽如此,你的问题中有一些要澄清的地方。
… Spring将为每个Web请求创建一个DAO的新实例…
这是不正确的。如果你的DAO是Spring bean,则它是单例,除非你通过scopebean定义中的属性对其进行了配置。为每个请求实例化一个DAO会很疯狂。
注入EMF的理由是,对于拥有工厂的人来说,EMF的良好实践总会带来好处。
这种说法并没有真正成立。一般的良好做法是,应向对象注入完成其工作所需的最少协作者。