Java EntityManager注入良好实践
如标题所示-为什么使用CDI(上下文和依赖项注入)注入Java EntityManager注入良好实践,java,jpa,jakarta-ee,cdi,Java,Jpa,Jakarta Ee,Cdi,如标题所示-为什么使用CDI(上下文和依赖项注入)注入EntityManager(使用生产者和@inject注释)被称为良好实践?为什么它比使用@PersistenceContext注释更好?我读到这是一个首选的实现,但我找不到原因。是JavaEE中依赖注入的标准技术,它可以方便地为创建方法生成器,然后您可以简单地注入到bean中 注释有许多可配置的元素(例如),例如,您可能不想在整个应用程序中复制它们 当您有多个持久性单元时,CDI注入特别有用。然后,您可以利用CDI限定符进行注射: publ
EntityManager
(使用生产者和@inject
注释)被称为良好实践?为什么它比使用@PersistenceContext
注释更好?我读到这是一个首选的实现,但我找不到原因。是JavaEE中依赖注入的标准技术,它可以方便地为创建方法生成器,然后您可以简单地注入到bean中
注释有许多可配置的元素(例如),例如,您可能不想在整个应用程序中复制它们
当您有多个持久性单元时,CDI注入特别有用。然后,您可以利用CDI限定符进行注射:
public class Databases {
@Produces @Users
@PersistenceContext(unitName="UserData")
EntityManager userEntityManager;
@Produces @Documents
@PersistenceContext(unitName="DocumentData")
EntityManager docDatabaseEntityManager;
}
是JavaEE中依赖项注入的标准技术,它可以方便地为应用程序创建一个方法生成器,然后您可以简单地注入到bean中
注释有许多可配置的元素(例如),例如,您可能不想在整个应用程序中复制它们
当您有多个持久性单元时,CDI注入特别有用。然后,您可以利用CDI限定符进行注射:
public class Databases {
@Produces @Users
@PersistenceContext(unitName="UserData")
EntityManager userEntityManager;
@Produces @Documents
@PersistenceContext(unitName="DocumentData")
EntityManager docDatabaseEntityManager;
}
谢谢你的解释!我还读到,通过PersistenceContext进行注入不是线程安全的,对吗?@Adam
EntityManager
不是线程安全的。但您应该阅读本文以了解更多详细信息。问题是,为什么需要“线程安全性”。通常,容器控制在并行线程中运行的内容以及共享的实例。在这种情况下,您不需要担心EntityManager实例的线程安全性。每个线程都将使用自己的事务来工作,因此使用自己的EntityManager。感谢您的解释!我还读到,通过PersistenceContext进行注入不是线程安全的,对吗?@AdamEntityManager
不是线程安全的。但您应该阅读本文以了解更多详细信息。问题是,为什么需要“线程安全性”。通常,容器控制在并行线程中运行的内容以及共享的实例。在这种情况下,您不需要担心EntityManager实例的线程安全性。每个线程都将使用自己的事务以及自己的EntityManager工作。正如旁注:CDI代表“上下文和依赖项注入”。正如旁注:CDI代表“上下文和依赖项注入”
@Inject @Documents
EntityManager em;