這兩天面試有人問(wèn)了問(wèn)題,singleton和prototype的區(qū)別?
就這問(wèn)題參考網(wǎng)上資料,總結(jié)一下,以備日后用。
單例模式,在spring 中其實(shí)是scope(作用范圍)參數(shù)的缺省設(shè)定值
每個(gè)bean定義只生成一個(gè)對(duì)象實(shí)例,每次getBean請(qǐng)求獲得的都是此實(shí)例
餓漢模式
| spring singleton的缺省是餓漢模式:啟動(dòng)容器時(shí)(即實(shí)例化容器時(shí)),為所有spring配置文件中定義的bean都生成一個(gè)實(shí)例
|
懶漢模式
| 在第一個(gè)請(qǐng)求時(shí)才生成一個(gè)實(shí)例,以后的請(qǐng)求都調(diào)用這個(gè)實(shí)例 spring singleton設(shè)置為懶漢模式:
<beans default-lazy-init="true">
|
- 另一種和singleton對(duì)應(yīng)的scope值---prototype多實(shí)例模式
調(diào)用getBean時(shí),就new一個(gè)新實(shí)例
singleton
xml配置文件: <bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" />
|
測(cè)試代碼: ctx = new ClassPathXmlApplicationContext("spring-hibernate-mysql.xml"); DvdTypeDAO tDao1 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO"); DvdTypeDAO tDao2 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO");
|
運(yùn)行: true com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333 com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333
說(shuō)明前后兩次getBean()獲得的是同一實(shí)例,說(shuō)明spring缺省是單例 |
prototype
<bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" scope="prototype" />
|
執(zhí)行同樣的測(cè)試代碼
|
運(yùn)行: false com.machome.hibernate.impl.DvdTypeDAOImpl@afae4a com.machome.hibernate.impl.DvdTypeDAOImpl@1db9852 說(shuō)明scope="prototype"后,每次getBean()的都是不同的新實(shí)例
|
輕輕的我走了, 正如我輕輕的來(lái); 我輕輕的招手, 作別西天的云彩。 那河畔的金柳, 是夕陽(yáng)中的新娘; 波光里的艷影, 在我的心頭蕩漾。 軟泥上的青荇, 油油的在水底招搖; 在康河的柔波里, 我甘心做一條水草! 那榆蔭下的一潭, 不是清泉, 是天上虹; 揉碎在浮藻間, 沉淀著彩虹似的夢(mèng)。 尋夢(mèng)?撐一支長(zhǎng)篙, 向青草更青處漫溯; 滿載一船星輝, 在星輝斑斕里放歌。 但我不能放歌, 悄悄是別離的笙簫; 夏蟲也為我沉默, 沉默是今晚的康橋! 悄悄的我走了, 正如我悄悄的來(lái); 我揮一揮衣袖, 不帶走一片云彩。