Sas*_*ota 6 java spring hibernate jpa spring-boot
使用构造函数注入是最佳实践。但是我无法实现这一点@PersistenceContext。
我想要以下构造函数:
private final EntityManager entityManager;
@Autowired
public MyService(@PersistenceContext EntityManager entityManager) {
    this.entityManager = entityManager;
}
但我不能,因为@PersistenceContext仅适用于TYPE,METHOD和FIELD。
问:如何通过构造函数注入来注入容器管理的容器? EntityManager
您似乎正在使用 spring,因此您的解决方案将相当简单:
\n\n@Component\n@Scope("prototype")\npublic class MyPersistenceContainer\n{\n@PersistenceContext\nprivate EntityManager em;\n\npublic EntityManager getEntityManager()\n{\nreturn em;\n}\n}\n现在您可以简单地在构造函数中注入此类的实例,它将始终保存一个有效的 EntityManager (因为 bean 作用域)。请注意:在网络环境中,您可能应该使用原型@SessionScope,甚至@RequestScope代替原型,这将节省资源
但有一些事情需要考虑:
\n\n\n\n\n当使用单例范围的 Bean 依赖于原型范围的 Bean 时,请注意依赖关系是在实例化时解决的。这意味着,如果您将原型范围的 bean 依赖项注入到单例范围的 bean 中,则会实例化一个全新的原型 bean,然后将依赖项注入到单例 bean 中……仅此而已。完全相同的原型实例将是提供给单例范围 bean 的唯一实例,如果这是您想要的,那就没问题。
\n\n然而,有时您真正想要的是单例范围的 bean 能够在运行时一次又一次地获取原型范围的 bean 的全新实例。在这种情况下,仅仅将原型作用域的 bean 依赖注入到单例 bean 中是没有用的,因为如上所述,只有当 Spring 容器实例化单例 bean 并解析和注入时,才会发生一次它的依赖项。如果您处于这样的场景,需要在运行时一次又一次地获取(原型)bean 的全新实例,请参考标题为第 4.3.7 节,\xe2\ 的部分。 x80\x9c方法注入\xe2\x80\x9d
\n
因此,如果您想将“实体管理器容器bean”注入单例bean (这是默认范围),请查看https://docs.spring.io/spring/docs/current/spring-framework-reference /core.html#beans-factory-method-injection
\n\n| 归档时间: | 
 | 
| 查看次数: | 2496 次 | 
| 最近记录: |