乐趣区

Spring-bean的作用域

在默认情况下,Spring 应用上下文中所有 bean 都是作为以单列 (singleton) 的形式创建的。也就是说,不管给定的一个 bean 被注入到其它 bean 多少次,每次所注入的都是同一个实例。

在大多数情况下,单例 bean 是很理想的方案。初始化和垃圾回收对象实例所带来的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用上下文中反复重用这些对象可能并不合理。

有时候,可能会发现,你所使用的类是易变的(mutable),它们会保持一些状态,因此重用是不安全的。在这种情况下,将 class 声明为单例的 bean 就不是什么好主意了,因为对象会被污染,稍后重用的时候会出现意想不到的问题。

Spring 定义了多种作用域,可以基于这些作用域创建 bean,包括:

  • 单例(Singleton):在整个应用中,只创建 bean 的一个实例
  • 原型(Prototype):每次注入或者通过 Spring 应用
退出移动版