首先,我认为我正在尝试错误地使用 Spring,但我们将不胜感激。
我正在尝试在应用程序中间重置单个 bean。我的初始配置运行得很好。
我的场景
- 1 个保险 claim bean( session 范围)
- 1 声明详细信息 bean,它是 多 Action Controller (启用 getClaim&setClaim,原型(prototype) 范围)
- 1 claim 人详细信息 bean,它是 多 Action Controller (启用 getClaim&setClaim,原型(prototype) 范围)
- 1 提交声明 bean,它是
多 Action Controller
(启用 getClaim&setClaim,原型(prototype) 范围)。
我的应用程序比这更复杂,但为了提供一个清晰的示例,我不会描述整个事情。
前两个 Controller 用于设置声明的各种属性、验证等。
第三个将声明写入数据库。然后我希望它重置 bean。但是,我不能只在 SubmitClaimController.OnSubmit() 中说 Claim=new Claim() ,因为 ApplicationContext 保留对旧声明的引用。
我可以创建一个方法 Claim.clear(),但这感觉像是错误的方法。但是,我看不到类似 ApplicationContext.destroyBean(beanname) 或 ApplicationContext.createBean() 的内容。
我不想刷新整个 ApplicationContext,因为我想在整个 session 期间保持其他 Bean 的 Activity 状态。
提前致谢。
最佳答案
我认为 Claim 对象不应该由 Spring 管理。它确实没有被注入(inject);听起来它应该与发送到 Controller 的请求绑定(bind)并传递给服务进行处理。如果您将声明放入 session 范围内,则需要在事务完成或 session 超时时使 session 失效。
顺便说一下,我看到你提到了三个 Controller ,但没有服务。您应该有一个服务层,并且 Controller 不应该处理 DAO 或持久性。
关于java - 刷新/替换 ApplicationContext 中的 bean。有可能还是我错过了重点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263416/