Spring中单例和多例模式

Spring容器管理的bean在默认情况下是单例的,也是一个bean只会创建一个对象,存在内置 map中,之后无论获取多少次该bean,都返回同一个对象。这样可以减小了对象的创建,从而减小了内存的开销。

bean在单例或多例模式下的生命周期:

单例模式

bean在单例模式下,spring容器启动时解析xml文件发现该bean标签后,直接创建该bean对象存入内部map中保存,此后无论调用多少次getBean()获取该bean都是从map中获取该对象返回,一直是一个对象。此对象一直被spring容器持有,直到容器推出时,随着容器的退出对象被销毁。

多例模式

bean在多例模式下,spring容器启动时解析xml发下该bean标签后,只是将该bean进行管理,并不会创建对象,此后每层使用getBean()获取该bean时,spring都会重新创建该对象返回,每层都是一个新的对象。这个对象spring容器并不会持有,什么时候销毁却决于该对象的用户自己什么时候销毁该对象。

在实际开发中,也存在多例的需求的,这时我们需要创建对象的方式多例。设置方式如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
        
        <!-- 
                scope属性控制当前bean的创建模式:
                        singleton:则当前bean处在单例模式中,默认就是此模式
                        prototype:则当前bean处在多例模式中
         -->
        <bean id="cart" class="com.spring.beans.Cart" scope="prototype"></bean>
        
</beans>

 

猜你喜欢

转载自www.cnblogs.com/jumpkin1122/p/11595455.html