Spring單例模式---轉載

  • singleton---單例模式

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

mysql

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



  • 另外一種和singleton對應的scope值---prototype多實例模式

調用getBean時,就new一個新實例

spring

  • singleton和prototype的比較

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()的都是不一樣的新實例
相關文章
相關標籤/搜索