Thi*_*ves 12 java dependency-injection jpa jboss-weld
在使用JPA的项目中,我经常使用
@Inject EntityManager em;
Run Code Online (Sandbox Code Playgroud)
为了获得这样的对象.我在网上看到很多代码片段而是使用:
@PersistenceContext EntityManager em;
Run Code Online (Sandbox Code Playgroud)
这些选项有什么区别?
我的代码运行在JBoss EAP 6.1和Hibernate上.
@PersistenceContext是一个非常具体的注释,它说"使用持久化上下文注入此字段".您不能在托管上下文之外使用它.
另一方面,@ Inject非常通用.它说,"你应该注入这个领域." 它不一定适用于持久化上下文,而是您想要定义为注入的任何内容.
这篇文章(并不完全是你要问的苹果)可能会为你提供更多的启示.
如果你想直接找到@Inject的来源,你可以在这里阅读规范:
@Inject,标识可以注入Java类或接口的依赖关系的点.然后容器提供所需的资源.在此示例中,Login bean指定两个注入点.
@PersistenceContext是一个特定的注释,它声明了对容器管理的实体管理器的依赖.它允许您指定更多参数,如持久性类型.当您希望维护有状态会话bean的整个生命周期的持久性上下文时,将持久性类型设置为EXTENDED非常重要.@PersistenceContext是JPA注释.
@Inject是CDI注释.它非常通用,可用于注入各种各样的对象.