同一会话中多个Sessionscoped Bean实例

时间:2018-10-11 13:27:57

标签: java dependency-injection ejb cdi

如果在同一会话中实例化多个SessionScoped Bean或EJB(第一次是通过容器注入的,而第二次是通过“ new”创建的),会发生什么? 它会抛出错误吗? 如果不是,将在注射过程中使用哪一个? 同样适用于AppllicationScoped和RequestScoped?!

P.S。类没有任何注释,但会给它们一个明确的名称。

1 个答案:

答案 0 :(得分:2)

要拥有真正托管的bean,您可以让CDI处理包括创建在内的生命周期。有例外,但我们现在就不讨论。

对于您而言,通过new创建的对象将根本不是托管bean,CDI将不知道该对象(除非它是某种生产者方法或类似方法的结果)。 您应该弄清楚为什么要创建它,而不仅仅是注入现有的?

  

AppllicationScoped和RequestScoped也一样吗?!

对于普通作用域bean的每个注入点,CDI将查看基础的“ bean存储”,并查看是否已经创建并存储了所需的bean。如果是这样,它只会返回给您一个(或者,是它的代理)。如果没有,它将创建一个新的文件并将其存储在那里以备将来参考。

最简单的答案是,您将不会有两个由CDI创建的同一个普通作用域bean的实例。