作用域是用来限制程序中变量的可用范围,Bean的作用域是Bean在Spring整个框架中的行为模式。
默认情况下,Spring应用上下文所有的bean都是以单例的形式创建的,不管给定的一个bean被注入到其他bean 多少次,每次所注入的都是同一个实例。如果一个Bean对象被两个人使用,其中一个人修改了这个Bean对象,那么另一个人拿到的就是修改后的Bean对象,而不是没有被修改的Bean对象。
在大多数情况下,单例bean是很理想的方案。初始化和垃圾回收对象实例所带来的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用中反复重用这些对象可能并不合理。使⽤单例模式可以很⼤程度上提⾼性能,所以在 Spring 中 Bean 的作⽤域默认也是 singleton 单例模式。
但是如果我们不希望出现上述的单例的情况,就可以使用Spring的其他作用域。Bean的作用域有6种:
使用@Scope注解来声明Bean的作用域。使⽤枚举设置@Scope(ConfigurableBeanFactory
.SCOPE_PROTOTYPE)就可以设置成多例作用域。
Bean的生命周期分为以下5个部分:
Bean的执行流程:启动 Spring 容器 -> 实例化 Bean(分配内存空间,从⽆到 有) -> Bean 注册到 Spring 中(存操作) -> 将 Bean 装配到需要的类中(取操作)。