我已经逐渐掌握了 Spring 一段时间,并且认为我对这些概念有一个合理的想法,但是我在另一个线程中遇到了信息,这让我的事情发生了翻天覆地的变化......
“...尽管在所有对象上调用初始化生命周期回调方法而不考虑范围,但在原型的情况下,不会调用配置的销毁生命周期回调。客户端代码必须清理原型范围的对象并释放原型 bean 的昂贵资源(s) 正在持有。要让 Spring 容器释放原型范围 bean 持有的资源,请尝试使用自定义 bean 后处理器,它包含对需要清理的 bean 的引用。
这让我想到我有真正的用例,我想使用原型 bean,例如,每个请求我需要一个“新”bean 实例。然而,根据我对这个片段的理解(来自 Spring 3 文档),Spring 保留对需要清理的 bean 的引用(引用本身意味着垃圾收集器不会自动清除 bean)。此外,我认为原型 bean 持有的资源必须手动清理。
有人可以让我知道这是否正确吗?如果是这样,是否有用于处理此问题的典型模式?我很欣赏一个可以描述 Spring 以这种方式实现原型 bean 的架构原因的答案。