编程语言
首页 > 编程语言> > java – CDI和池

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