【发布时间】:2012-06-12 22:51:37
【问题描述】:
我已经逐渐掌握 Spring 有一段时间了,并且认为我对这些概念有一个合理的想法,但是我在另一个线程中遇到了一些信息,这让我的事情发生了翻天覆地的变化......
"...虽然初始化生命周期回调方法会在所有对象上调用而不考虑范围,但在原型的情况下,不会调用配置的销毁生命周期回调。客户端代码必须清理原型范围的对象并释放昂贵的资源原型 bean 正在持有。要让 Spring 容器释放原型范围 bean 持有的资源,请尝试使用自定义 bean 后处理器,它包含对需要清理的 bean 的引用。"
这让我想到我有真正的用例,我想使用原型 bean,例如,每个请求我需要一个“新”bean 实例。但是,根据我对这个 sn-p 的理解(来自 Spring 3 文档),Spring 保留对需要清理的 bean 的引用(引用本身意味着垃圾收集器不会自动清除 bean)。此外,我认为原型 bean 持有的资源必须手动清理。
有人可以告诉我这是否正确吗?如果是这样,是否有用于处理此问题的典型模式?我很感激能描述 Spring 以这种方式实现原型 bean 的架构原因的答案。
【问题讨论】:
-
如果您需要按请求限定范围,您可以使用请求范围;)static.springsource.org/spring/docs/3.0.0.M3/…
-
@Spaeth 抱歉,我可能误导了...这不是一个 Web 应用程序,我只是想证明需要创建一个新实例来处理发生的“某事”
标签: java spring architecture garbage-collection