gpt4 book ai didi

java - 注入(inject) Guice 的 DAO 应该是单例吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:19 25 4
gpt4 key购买 nike

我目前正在开发一个应用程序,利用 Guice/JPA/Hibernate 从我的数据库中获取信息。

我在这里阅读了关于使用 JPA 和 EntityManagars 的 Guice 文档:http://code.google.com/p/google-guice/wiki/JPA ,

但我无法理解何时应该将我的 DAO 实现单例化。

我读过这个question关于 Spring 使用 DAO 的 S/O,它说:

Instantiating a DAO for every request would be crazy.

除 Spring 之外,这是否适用于 DI 容器?如果我将 DAO 提供程序注入(inject)我的 Servlet 并在需要时调用,DAO 服务实现是否应该是单例?

这是我的一个 DAO 的基本轮廓:

public DAOImpl implements DAOService { <-- SHOULD THIS BE ANNOTATED @Singleton?

@Inject
private EntityManager em;
// OR
// @Inject
// private Provider<EntityManager> emProvider - If it's a singleton.

@Inject
DAOImpl(OtherServices os) {
this.otherServices = os;
}

@Transactional
public MyPersistedObject getPersistedObject(long id) {
MyPersistedObject mpo = em.find(MyPersistedObject.class, id);
return mpo;
}
}

它的称呼:

   @Singleton
public MyServlet(HttpRequest req, HttpRequest res)
extends ServletInterfaceOfTheDay {

private final daoService; // If Singleton
// OR
// private final Provider<DAOService>; If Instanced DAO

@Inject
MyServlet(DAOService dao) {
this.daoService = dao;
}

// Gather Information from request here...

MyPersistedObject mpo = daoService.getPersistedObject(requestIdInfo);
// OR daoService.get().getPersistedObject(requestIdInfo);

// Process Response Info here....

}

感谢您的帮助。

最佳答案

不,因为 EntityManager 绝对不是线程安全的。您需要使用提供商。

关于java - 注入(inject) Guice 的 DAO 应该是单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com