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>