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>