首先,我想我正在尝试错误地使用Spring,但确认会受到赞赏。
我正在尝试在应用程序中期重置单个bean。我的初始配置工作正常。
我的情景
我的申请比这更复杂,但为了提供一个明确的例子我不会描述整个事情。
前两个控制器用于设置索赔的各种属性,验证等 第三个人向数据库写了一个声明。那我想要它重置bean。但是我不能在SubmitClaimController.OnSubmit()中声明claim = new Claim(),因为ApplicationContext保持对旧Claim的引用。
我可以创建一个方法Claim.clear(),但这感觉就像是错误的方法。但是,我看不到像ApplicationContext.destroyBean(beanname)或ApplicationContext.createBean()这样的内容。
我不想刷新整个ApplicationContext,因为我希望在整个会话期间保持其他bean。
提前致谢。
答案 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
干杯!