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與單例模式的區別的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
本文題目:淺談Spring單例Bean與單例模式的區別
標題URL:http://vcdvsql.cn/article24/gjgoje.html
成都網站建設公司_創新互聯,為您提供做網站、商城網站、自適應網站、網站內鏈、云服務器、定制網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯