淺談Spring單例Bean與單例模式的區(qū)別

Spring單例Bean與單例模式的區(qū)別在于它們關(guān)聯(lián)的環(huán)境不一樣,單例模式是指在一個(gè)JVM進(jìn)程中僅有一個(gè)實(shí)例,而Spring單例是指一個(gè)Spring Bean容器(ApplicationContext)中僅有一個(gè)實(shí)例。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供樂(lè)亭網(wǎng)站建設(shè)、樂(lè)亭做網(wǎng)站、樂(lè)亭網(wǎng)站設(shè)計(jì)、樂(lè)亭網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、樂(lè)亭企業(yè)網(wǎng)站模板建站服務(wù),十多年樂(lè)亭做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

首先看單例模式,在一個(gè)JVM進(jìn)程中(理論上,一個(gè)運(yùn)行的JAVA程序就必定有自己一個(gè)獨(dú)立的JVM)僅有一個(gè)實(shí)例,于是無(wú)論在程序中的何處獲取實(shí)例,始終都返回同一個(gè)對(duì)象,以Java內(nèi)置的Runtime為例(現(xiàn)在枚舉是單例模式的最佳實(shí)踐),無(wú)論何時(shí)何處獲取,下面的判斷始終為真:

// 基于懶漢模式實(shí)現(xiàn)
// 在一個(gè)JVM實(shí)例中始終只有一個(gè)實(shí)例
Runtime.getRuntime() == Runtime.getRuntime()

與此相比,Spring的單例Bean是與其容器(ApplicationContext)密切相關(guān)的,所以在一個(gè)JVM進(jìn)程中,如果有多個(gè)Spring容器,即使是單例bean,也一定會(huì)創(chuàng)建多個(gè)實(shí)例,代碼示例如下:

// 第一個(gè)Spring Bean容器
ApplicationContext context_1 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
Person yiifaa_1 = context_1.getBean("yiifaa", Person.class);
// 第二個(gè)Spring Bean容器
ApplicationContext context_2 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
Person yiifaa_2 = context_2.getBean("yiifaa", Person.class);
// 這里絕對(duì)不會(huì)相等,因?yàn)閯?chuàng)建了多個(gè)實(shí)例
System.out.println(yiifaa_1 == yiifaa_2);

以下是Spring的配置文件:

<!-- 即使聲明了為單例,只要有多個(gè)容器,也一定會(huì)創(chuàng)建多個(gè)實(shí)例 -->
<bean id="yiifaa" class="com.stixu.anno.Person" scope="singleton">
  <constructor-arg name="username">
    <value>yiifaa</value>
  </constructor-arg>
</bean>

總結(jié)

Spring的單例bean與Spring bean管理容器密切相關(guān),每個(gè)容器都會(huì)創(chuàng)建自己獨(dú)有的實(shí)例,所以與GOF設(shè)計(jì)模式中的單例模式相差極大,但在實(shí)際應(yīng)用中,如果將對(duì)象的生命周期完全交給Spring管理(不在其他地方通過(guò)new、反射等方式創(chuàng)建),其實(shí)也能達(dá)到單例模式的效果。

以上就是本文關(guān)于淺談Spring單例Bean與單例模式的區(qū)別的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

本文題目:淺談Spring單例Bean與單例模式的區(qū)別
標(biāo)題URL:http://muchs.cn/article24/gjgoje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、商城網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈、云服務(wù)器、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)