刷新/替换ApplicationContext中的bean。可能还是我错过了这一点?

时间:2009-08-11 22:51:55

标签: java spring web-applications

首先,我想我正在尝试错误地使用Spring,但确认会受到赞赏。

我正在尝试在应用程序中期重置单个bean。我的初始配置工作正常。

我的情景

  • 1保险索赔bean(会话 范围)
  • 1索赔详情bean是a 是MultiActionController (启用了getClaim& setClaim,原型 范围)
  • 1索赔人详细说明bean是a 是MultiActionController (启用了getClaim& setClaim,原型 范围)
  • 1提交声明bean,这是一个
    MultiActionController的
    (启用了getClaim& setClaim,原型 范围)。

我的申请比这更复杂,但为了提供一个明确的例子我不会描述整个事情。

前两个控制器用于设置索赔的各种属性,验证等 第三个人向数据库写了一个声明。那我想要它重置bean。但是我不能在SubmitClaimController.OnSubmit()中声明claim = new Claim(),因为ApplicationContext保持对旧Claim的引用。

我可以创建一个方法Claim.clear(),但这感觉就像是错误的方法。但是,我看不到像ApplicationContext.destroyBean(beanname)或ApplicationContext.createBean()这样的内容。

我不想刷新整个ApplicationContext,因为我希望在整个会话期间保持其他bean。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为Claim对象不应该是Spring管理的。它真的没有注入;听起来它应该从发送到控制器的请求绑定并传递给服务进行处理。如果将Claim设置为会话范围,则需要在事务完成或会话超时时使会话无效。

顺便说一下,我看到你提到三个控制器,但没有服务。您应该有一个服务层,控制器不应该处理DAO或持久性。

答案 1 :(得分:1)

您可以更改bean的范围。默认值是单例,有时在Web上下文中不合适。例如,您可以通过添加将其更改为会话作用域 属性scope="session" 和孩子<aop:scoped-proxy proxy-target-class="false"/> 到bean定义。

我正在使用3.0M4,顺便说一句,但我希望它也可以在早期版本中使用,因为它是一个非常重要的功能。看看:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch03s05.html

干杯!