【发布时间】:2018-10-11 13:27:56
【问题描述】:
如果在同一个会话中我实例化了多个 SessionScoped Bean 或 EJB(第一次通过容器注入,第二次通过“new”创建),会发生什么? 它会抛出错误吗? 如果不是,在注射过程中将使用它们中的哪一个? AppllicationScoped 和 RequestScoped 也一样?!
附:没有任何注释的类确实给它们一个明确的名称。
【问题讨论】:
-
为什么要实例化多个 SessionScoped Bean?
-
我不想要,但我在旧代码中看到它。我想知道会发生什么,并试图理解为什么要这样做。
-
Spring 没有被标记,但是在 Spring 下,相同类型的多个 bean 可以通过使用唯一名称来解析,因此每个实例都可以按名称注入,而不仅仅是依赖于类型。 Spring 还有其他选项,例如使用@Primary - 有关详细信息,请参阅docs。如果 Spring 无法解析 bean 依赖项,则应用程序将无法启动。
-
春天不是这样,但很高兴知道。在我的情况下,这些类没有明确的名称。我会更新我的问题。谢谢
-
不确定“实例化多个 SessionScoped Bean”是什么意思。一个正确管理的 SessionScoped bean 不应该被实例化,而是被注入,这意味着容器正在处理是从池中给你一个,还是在需要时创建一个新的。如果您正确地让容器为您管理 bean,那么在“会话”范围内,您应该每次都得到相同的返回。如果你是通过“new”直接实例化它,它并不是真正的 SessionScoped,而只是一个非托管的 pojo。
标签: java dependency-injection ejb cdi