国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

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

2024-07-13 10:15:32
字體:
來源:轉載
供稿:網友

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與單例模式的區別的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 恭城| 新营市| 丹江口市| 麦盖提县| 鱼台县| 万盛区| 会泽县| 普陀区| 沙坪坝区| 尼勒克县| 九江县| 丰城市| 广丰县| 巴林左旗| 上高县| 灵璧县| 克东县| 松桃| 棋牌| 西林县| 静宁县| 怀化市| 鹤岗市| 佳木斯市| 清涧县| 富川| 应用必备| 克拉玛依市| 安化县| 吴桥县| 新巴尔虎左旗| 军事| 波密县| 乐都县| 南岸区| 陆丰市| 林甸县| 桓台县| 焉耆| 西昌市| 台南县|