spring 的單例模式

原文地址:http://blog.sina.com.cn/s/blog_6151984a0100kfij.htmlhtml

 

 

  • singleton---單例模式
單例模式,在spring 中實際上是scope(做用範圍)參數的缺省設定值
每一個bean定義只生成一個對象實例,每次getBean請求得到的都是此實例

  • 單例模式分爲餓漢模式和懶漢模式
餓漢模式
spring singleton的缺省是餓漢模式:啓動容器時(即實例化容器時),爲全部spring配置文件中定義的bean都生成一個實例
懶漢模式
在第一個請求時才生成一個實例,之後的請求都調用這個實例
spring singleton設置爲懶漢模式:

<beans
default-lazy-init="true">


  • 另外一種和singleton對應的scope值---prototype多實例模式
調用getBean時,就new一個新實例

  • singleton和prototype的比較
singleton
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" />
 
執行一樣的測試代碼
運行:falsecom.machome.hibernate.impl.DvdTypeDAOImpl@afae4acom.machome.hibernate.impl.DvdTypeDAOImpl@1db9852說明scope="prototype"後,每次getBean()的都是不一樣的新實例
相關文章
相關標籤/搜索