CDI和汇集

Pet*_*sik 3 java pool cdi

是否CDI允许以某种方式汇集?因为我认为这是EJBbean的一个特性,但是Adam Bien在这个截屏视频中说容器选择是通过反射创建新的类实例还是使用现有的实例.所以,如果我有这两个bean

@RequestScoped
public class RequestBean {

    public void doIt() {

    }
}

@SessionScoped
public class SessionBean {

    @Inject
    private RequestBean bean;    

    public void doSomething() {
        bean.doIt();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

JB *_*zet 10

第一个作用域为请求,因此为每个请求创建一个新实例.第二个范围限定为会话,因此为每个会话创建一个新的会话.

CDI不会对对象进行池化和回收,因为它不知道对象是否有状态,并且您不希望在请求中返回Bean在先前请求中所具有的状态.这将破坏请求/会话范围的全部要点.

除非bean的创建成​​本非常高(因为它们启动了新的连接或类似的东西),所以汇集它们并没有带来任何好处.如今,短命对象的创建和垃圾收集速度非常快.如果创建的bean真的很贵,那么它应该是一个单例.