From 9601264d424c1ae21db0a3e8ddf7bd4ed3762790 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Tue, 29 Jan 2019 22:20:33 +0800 Subject: [PATCH] Update SpringBean.md --- .../SpringBean.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/\344\270\273\346\265\201\346\241\206\346\236\266/SpringBean.md" "b/\344\270\273\346\265\201\346\241\206\346\236\266/SpringBean.md" index 892cdecf..c51985dd 100644 --- "a/\344\270\273\346\265\201\346\241\206\346\236\266/SpringBean.md" +++ "b/\344\270\273\346\265\201\346\241\206\346\236\266/SpringBean.md" @@ -23,6 +23,8 @@ **Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?** 例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框架之后,每个Action都是单例的,那么对于Spring托管的单例Service Bean,如何保证其安全呢? **Spring的单例是基于BeanFactory也就是Spring容器的,单例Bean在此容器内只有一个,Java的单例是基于 JVM,每个 JVM 内只有一个实例。** +在大多数情况下。单例 bean 是很理的方案。不过,有时候你可能会发现你所使用的类是易变的,它们会保持一些状态,因此重用是不安全的。在这种情况下,将 class 声明为单例的就不是那么明智了。因为对象会被污染,稍后重用的时候会出现意想不到的问题。所以 Spring 定义了多种作用域的bean。 + # 一 bean的作用域 创建一个bean定义,其实质是用该bean定义对应的类来创建真正实例的“配方”。把bean定义看成一个配方很有意义,它与class很类似,只根据一张“处方”就可以创建多个实例。不仅可以控制注入到对象中的各种依赖和配置值,还可以控制该对象的作用域。这样可以灵活选择所建对象的作用域,而不必在Java Class级定义作用域。Spring Framework支持五种作用域,分别阐述如下表。 -- GitLab