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