【发布时间】:2018-06-01 13:31:08
【问题描述】:
如标题所示——为什么使用 CDI(上下文和依赖注入)来注入 EntityManager(使用 Producer 和 @Inject 注解)被称为好习惯?为什么比使用@PersistenceContext注解更好?我读到这是一个首选的实现,但我找不到原因。
【问题讨论】:
-
附带说明:CDI 代表“上下文和依赖注入”。
标签: java jpa jakarta-ee cdi
如标题所示——为什么使用 CDI(上下文和依赖注入)来注入 EntityManager(使用 Producer 和 @Inject 注解)被称为好习惯?为什么比使用@PersistenceContext注解更好?我读到这是一个首选的实现,但我找不到原因。
【问题讨论】:
标签: java jpa jakarta-ee cdi
CDI 是 Java EE 中依赖注入的标准技术,它方便为 EntityManager 创建方法生产者,然后您可以简单地注入到您的 bean 中。
@PersistenceContext 注释具有许多可配置元素(例如 name),例如,您可能不想在整个应用程序中复制它们。
CDI 注入特别有用。然后您可以利用 CDI 限定符进行注入:
public class Databases {
@Produces @Users
@PersistenceContext(unitName="UserData")
EntityManager userEntityManager;
@Produces @Documents
@PersistenceContext(unitName="DocumentData")
EntityManager docDatabaseEntityManager;
}
@Inject @Users
EntityManager em;
@Inject @Documents
EntityManager em;
【讨论】:
EntityManager 不是线程安全的。但是您应该阅读此answer 以了解更多详细信息。