gpt4 book ai didi

java - CDI 和池化

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:56 26 4
gpt4 key购买 nike

CDI 是否允许以某种方式进行池化?因为我认为这是 EJB bean 的一个特性,但 Adam Bien 在这 screencast 中说该容器选择是通过反射创建类的新实例还是使用现有实例。所以如果我有这两个 bean

@RequestScoped
public class RequestBean {

public void doIt() {

}
}

@SessionScoped
public class SessionBean {

@Inject
private RequestBean bean;

public void doSomething() {
bean.doIt();
}
}

问题是 - 在调用 doSomething 时是否总是创建 RequestBean 的新实例,或者 CDI 容器是否以某种方式管理池中的实例?

最佳答案

第一个是请求的范围,因此为每个请求创建一个新实例。第二个是 session 的范围,因此为每个 session 创建一个新的。

CDI 不汇集和回收对象,因为它不知道对象是否有状态,并且您不希望在请求中取回 bean 在先前请求中的状态.这会破坏请求/ session 范围的全部意义。

除非 bean 的创建成本真的很高(因为它们会启动一个新连接或类似的东西),否则将它们组合在一起不会带来任何优势。如今,短期对象的创建和垃圾收集速度非常快。如果创建这个 bean 真的很昂贵,那么它应该是一个单例。

关于java - CDI 和池化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16723174/

26 4 0