当我使用spring框架编写业务代码时,我总是使用单例作用域并避免使用原型作用域。我认为原型和单例之间存在性能差异。由于原型范围的原因,spring 每次调用都会创建一个新实例。我认为它比使用单例作用域慢。我对吗?我是否对性能考虑太多?
是的,你是对的,原型作用域 bean 消耗更多资源。根据文档:
\n\n\nbean 部署的非单例原型范围会导致每次发出对该特定 bean 的请求时创建一个新的 bean 实例。
\n
对于单例作用域 bean,构造函数会在每次请求时调用,而不是只调用一次。但还有另一个方面需要考虑。文档说:
\n\n\n因此,尽管无论范围如何,都会在所有对象上调用初始化生命周期回调方法,但在原型的情况下,不会调用配置的销毁生命周期回调。客户端代码必须清理原型范围内的对象并释放原型 bean 所拥有的昂贵资源。要让 Spring 容器释放原型范围 bean 所持有的资源,请尝试使用自定义 bean 后处理器,该处理器包含对需要清理的 bean 的引用。
\n在某些方面,Spring 容器\xe2\x80\x99 在原型范围 bean 中的角色是 Java new 运算符的替代品。该点之后的所有生命周期管理都必须由客户处理。
\n
如果您想避免内存不足异常,则必须自行释放原型作用域 bean 所持有的所有资源(例如数据库连接)。
\n除非确实需要,否则最好使用单例作用域 bean。
\n| 归档时间: |
|
| 查看次数: |
3926 次 |
| 最近记录: |