自由飛翔

          我在仰望,java之上

          統計

          留言簿(2)

          我關注的blog

          閱讀排行榜

          評論排行榜

          spring的singleton和prototype

          這兩天面試有人問了問題,singleton和prototype的區別?
          就這問題參考網上資料,總結一下,以備日后用。

          原文地址:作者:macg

          • 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" />
           
          執行同樣的測試代碼
          運行:
          false
          com.machome.hibernate.impl.DvdTypeDAOImpl@afae4a
          com.machome.hibernate.impl.DvdTypeDAOImpl@1db9852
          說明scope="prototype"后,每次getBean()的都是不同的新實例






          Gavin

          posted on 2011-08-10 17:31 GavinMiao 閱讀(2038) 評論(0)  編輯  收藏 所屬分類: spring

          主站蜘蛛池模板: 建宁县| 龙州县| 开阳县| 高雄市| 安达市| 防城港市| 仪征市| 彭山县| 天气| 万州区| 徐汇区| 南康市| 萨迦县| 镇沅| 柳州市| 湛江市| 元谋县| 寿阳县| 庄浪县| 丽江市| 永福县| 泰州市| 翼城县| 敦煌市| 桐柏县| 西丰县| 乐都县| 武定县| 延吉市| 卢湾区| 武功县| 竹溪县| 吕梁市| 兴国县| 肃南| 满洲里市| 宁陵县| 肥城市| 济源市| 大姚县| 昆明市|