1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Update SpringBean.md

This commit is contained in:
SnailClimb 2019-01-29 22:20:33 +08:00 committed by GitHub
parent 10e52c1559
commit 9601264d42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -23,6 +23,8 @@
**Spring中的bean默认都是单例的这些单例Bean在多线程程序下如何保证线程安全呢** 例如对于Web应用来说Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求引入Spring框架之后每个Action都是单例的那么对于Spring托管的单例Service Bean如何保证其安全呢 **Spring的单例是基于BeanFactory也就是Spring容器的单例Bean在此容器内只有一个Java的单例是基于 JVM每个 JVM 内只有一个实例。** **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定义对应的类来创建真正实例的“配方”。把bean定义看成一个配方很有意义它与class很类似只根据一张“处方”就可以创建多个实例。不仅可以控制注入到对象中的各种依赖和配置值还可以控制该对象的作用域。这样可以灵活选择所建对象的作用域而不必在Java Class级定义作用域。Spring Framework支持五种作用域分别阐述如下表。 创建一个bean定义其实质是用该bean定义对应的类来创建真正实例的“配方”。把bean定义看成一个配方很有意义它与class很类似只根据一张“处方”就可以创建多个实例。不仅可以控制注入到对象中的各种依赖和配置值还可以控制该对象的作用域。这样可以灵活选择所建对象的作用域而不必在Java Class级定义作用域。Spring Framework支持五种作用域分别阐述如下表。