我想知道CDI中存储库类的最有效(就所需资源而言)的范围。想象一下以下场景:
@RequestScoped
//OR @ApplicationScoped OR @SessionScoped OR @ConversationScoped?
public class SomeRepository{
@Inject
private EntityManager em;
public SomeClass getSomeClassById(int id){
return em.createNamedQuery("getSomeClassById",SomeClass.class).
setParameter("id",id).getSingleResult();
}
}
该示例中的EntityManager使用@RequestScoped
范围生成。
答案 0 :(得分:1)
我认为有趣的问题。出乎意料的是,我想不出任何使这些课特别的东西。所以我会将它们@ApplicationScoped
作为一个新实例,其功能与我刚丢弃的实例完全相同。不确定它会对堆有任何明显的影响,可能不是,但也许它们必须重新创建很多?
我认为可以选择概念上更合适的方式。