91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談Spring單例Bean與單例模式的區別

發布時間:2020-10-01 08:24:20 來源:腳本之家 閱讀:220 作者:蟻方陣 欄目:編程語言

Spring單例Bean與單例模式的區別在于它們關聯的環境不一樣,單例模式是指在一個JVM進程中僅有一個實例,而Spring單例是指一個Spring Bean容器(ApplicationContext)中僅有一個實例。

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

// 基于懶漢模式實現
// 在一個JVM實例中始終只有一個實例
Runtime.getRuntime() == Runtime.getRuntime()

與此相比,Spring的單例Bean是與其容器(ApplicationContext)密切相關的,所以在一個JVM進程中,如果有多個Spring容器,即使是單例bean,也一定會創建多個實例,代碼示例如下:

// 第一個Spring Bean容器
ApplicationContext context_1 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
Person yiifaa_1 = context_1.getBean("yiifaa", Person.class);
// 第二個Spring Bean容器
ApplicationContext context_2 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
Person yiifaa_2 = context_2.getBean("yiifaa", Person.class);
// 這里絕對不會相等,因為創建了多個實例
System.out.println(yiifaa_1 == yiifaa_2);

以下是Spring的配置文件:

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

總結

Spring的單例bean與Spring bean管理容器密切相關,每個容器都會創建自己獨有的實例,所以與GOF設計模式中的單例模式相差極大,但在實際應用中,如果將對象的生命周期完全交給Spring管理(不在其他地方通過new、反射等方式創建),其實也能達到單例模式的效果。

以上就是本文關于淺談Spring單例Bean與單例模式的區別的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓝山县| 芒康县| 枣阳市| 马边| 东乡县| 陆川县| 永泰县| 沈丘县| 大安市| 虹口区| 建水县| 东至县| 射洪县| 东丰县| 仪陇县| 大同县| 汤阴县| 吕梁市| 辉南县| 浦东新区| 咸丰县| 湘潭县| 田阳县| 唐河县| 当雄县| 千阳县| 眉山市| 阳朔县| 佛冈县| 柳林县| 高雄市| 红河县| 昌乐县| 东光县| 广南县| 阳信县| 新乐市| 广东省| 城步| 会昌县| 河源市|