单例设计模式与弹簧容器中的单例豆
2022-08-31 09:33:41
众所周知,我们在Spring容器中默认将Bean作为单例,如果我们有一个基于Spring框架的Web应用程序,那么在这种情况下,我们真的需要实现Singleton设计模式来保存全局数据,而不仅仅是在Spring中创建一个Bean。
如果我无法解释我真正想问什么,请耐心等待。
众所周知,我们在Spring容器中默认将Bean作为单例,如果我们有一个基于Spring框架的Web应用程序,那么在这种情况下,我们真的需要实现Singleton设计模式来保存全局数据,而不仅仅是在Spring中创建一个Bean。
如果我无法解释我真正想问什么,请耐心等待。
Spring中的单例豆和单例模式有很大不同。单例模式表示,每个类装入器将创建一个且只有一个特定类的实例。
Spring 单例的范围被描述为“每个容器每个豆子”。它是Bean定义的范围,每个Spring IoC容器的单个对象实例。Spring 中的默认作用域是 Singleton。
即使默认作用域是单例,也可以通过指定元素的作用域属性来更改 Bean 的作用域。<bean ../>
<bean id=".." class=".." scope="prototype" />
我发现“每个容器每个豆子”很难理解。我会说“容器中每个bean id一个bean”。让我们举个例子来理解它。我们有一个豆类示例。我在bean定义中定义了这个类中的两个bean,例如:
<bean id="id1" class="com.example.Sample" scope="singleton">
<property name="name" value="James Bond 001"/>
</bean>
<bean id="id7" class="com.example.Sample" scope="singleton">
<property name="name" value="James Bond 007"/>
</bean>
因此,当我尝试获取id为“id1”的bean时,spring容器将创建一个bean,将其缓存并在使用id1引用的地方返回相同的bean。如果我尝试使用id7获取它,将从样本类创建另一个bean,每次使用id7引用它时,都会缓存并返回相同的bean。
对于单例模式,这不太可能。在 Singlton 模式中,每个类装入器始终创建一个对象。但是,在 Spring 中,将作用域设置为 Singleton 并不限制容器从该类创建多个实例。它只是再次限制为同一 ID 创建新对象,并在请求同一 ID 的对象时返回以前创建的对象。参考