如何创建初始化的Spring bean(在会话范围内)

时间:2013-05-27 19:41:46

标签: spring jsf-2 primefaces facelets

我正在尝试为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上下文),但在我的情况下似乎是必要的。

1 个答案:

答案 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