一个很长的问题,请耐心等待。
我们正在使用 Spring+JPA 来构建 Web 应用程序。我的团队正在争论注射问题EntityManagerFactory
in the GenericDAO
(APPFUSE 提供的基于 Generics 的 DAO,我们不使用JpaDaosupport
由于某种原因)过度注入EntityManager
。我们正在使用“应用程序管理的持久性”。
反对注入的论点EntityManagerFactory
是它太重了,所以不需要,EntityManager
做我们需要的。另外,由于 Spring 会为每个 Web 请求创建一个新的 DAO 实例(我对此表示怀疑),因此不会出现任何并发问题EntityManager
实例由两个线程共享。
注入 EFM 的理由是,它是一种很好的实践,拥有工厂的句柄总是好的。
我不确定哪种方法是最好的,有人可以启发我吗?
Spring 文档中详细说明了注入 EntityManagerFactory 与 EntityManager 的优缺点here http://static.springsource.org/spring/docs/2.5.x/reference/orm.html#orm-jpa-straight,我不确定我是否可以改进这一点。
话虽如此,你的问题中有一些要点需要澄清。
...Spring 将创建一个新实例
每个网络请求都有一个 DAO...
这是不正确的。如果您的 DAO 是 Spring bean,那么它就是单例,除非您通过其他方式配置它scope
bean 定义中的属性。为每个请求实例化一个 DAO 是疯狂的。
注入 EMF 的论点是
总的来说,这是一个很好的做法
有一个手柄总是好的
工厂。
这个论点实在站不住脚。一般的良好实践表明,一个对象应该注入完成其工作所需的最少协作者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)