單例模式,在spring 中實際上是scope(做用範圍)參數的缺省設定值
每一個bean定義只生成一個對象實例,每次getBean請求得到的都是此實例
mysql
餓漢模式 | spring singleton的缺省是餓漢模式:啓動容器時(即實例化容器時),爲全部spring配置文件中定義的bean都生成一個實例 |
懶漢模式 | 在第一個請求時才生成一個實例,之後的請求都調用這個實例 spring singleton設置爲懶漢模式: <beans default-lazy-init="true"> |
調用getBean時,就new一個新實例
spring
singletonsql
xml配置文件: <bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" /> |
測試代碼: ctx = new ClassPathXmlApplicationContext("spring-hibernate-mysql.xml"); DvdTypeDAO tDao1 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO"); DvdTypeDAO tDao2 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO"); |
運行: true com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333 com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333 說明先後兩次getBean()得到的是同一實例,說明spring缺省是單例 |
prototype測試
<bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" scope="prototype" /> |
執行一樣的測試代碼 |
運行: false com.machome.hibernate.impl.DvdTypeDAOImpl@afae4a com.machome.hibernate.impl.DvdTypeDAOImpl@1db9852 說明scope="prototype"後,每次getBean()的都是不一樣的新實例 |