0

我正在尝试为 Spring/facelets 应用程序创建多选项卡(JavaScript 选项卡)界面,并且我有 sc 窗口管理器,其中包含窗口(选项卡)数组。每个窗口(选项卡)都包含 Spring bean(会话范围),它接收(作为注入)其他 Spring bean,例如用于业务服务、DAO bean 等。我将 Primefaces p:tabView 用于 facelets 部分。

当用户创建新选项卡时,应创建新的 Spring bean(作为窗口/选项卡的一部分)并将其添加到窗口管理器 bean(WindowManager.addWindow(...) 具有从 p:commandButton 收集的方法,并且创建窗口/选项卡及其会话)。问题是 - 如何创建这个 bean 并初始化它(使用注入的 bean)?一种解决方案可能是调用 ctx.getBean("beanName"),但我不敢使用它,因为它有名称,而且这个名称似乎是唯一的。

也许 Spring bean 的编程创建不是好的设计(它们应该是自动创建的,但是当它们处理 Web 请求时会创建 Web 服务器/Spring 上下文),但在我的情况下似乎是必要的。

4

1 回答 1

2

您必须使用范围“原型”定义该 bean,此设置会导致 Spring 上下文在每次调用 context.getBean("beanName"); 时创建一个新实例;

要配置它,您可以使用:

@scope("prototype") 

或者

<bean id="beanName" class="com.foo.myBean" scope="prototype"/>

取决于您使用的是 java 还是 xml 配置。查看 Spring 文档以获取更多详细信息:

http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html

于 2013-05-28T11:24:10.057 回答