java – CDI和池
作者:互联网
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容器以某种方式管理池中的实例?
解决方法:
第一个作用域为请求,因此为每个请求创建一个新实例.第二个范围限定为会话,因此为每个会话创建一个新的会话.
CDI不会对对象进行池化和回收,因为它不知道对象是否有状态,并且您不希望在请求中返回Bean在先前请求中所具有的状态.这将破坏请求/会话范围的全部要点.
除非bean的创建成本非常高(因为它们启动了新的连接或类似的东西),所以汇集它们并没有带来任何好处.如今,短命对象的创建和垃圾收集速度非常快.如果创建的bean真的很贵,那么它应该是一个单例.
标签:java,cdi,pool 来源: https://codeday.me/bug/20190718/1493067.html