我正在尝试为Spring / facelets应用程序创建多标签(JavaScript标签)界面,我有s.c.窗口管理器,包含一系列窗口(选项卡)。每个窗口(选项卡)包含Spring bean(会话范围),它接收(作为注入)其他春豆,例如,用于商业服务,DAO豆等。我正在使用Primefaces p:tabView for facelets part。
当用户创建新选项卡时,应创建新的Spring bean(作为窗口/选项卡的一部分)并添加到窗口管理器bean(WindowManager.addWindow(...)具有从p收集的方法: commandButton并创建窗口/选项卡及其会话)。问题是 - 如何创建这个bean并初始化它(使用注入的bean)?一种解决方案可能是调用ctx.getBean(“beanName”),但我害怕使用它,因为它有名称,这个名称似乎是唯一的。
也许Spring bean的程序化创建不是好设计(它们应该在处理Web请求时自动创建,但是Web服务器/ Spring上下文),但在我的情况下似乎是必要的。
答案 0 :(得分:2)
您必须使用范围“prototype”定义该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