朋友,我讀春季3 - spring容器給辛格爾頓豆,默認情況下,當我們創建它們使用構造函數。但是如果我們使用工廠方法,那麼它應該以只返回單個bean的方式實現。頁碼37與標題的Spring bean創建在行動</p> <p>它說工廠方法和違約Singleton模式
CREATING BEANS THROUGH FACTORY METHODS
因此,作者不得不通過以下代碼維護線程安全。否則,有兩個併發線程可能會創建兩個Spring Bean實例。
package com.springinaction.springidol;
public class Stage {
private Stage() {
}
private static class StageSingletonHolder {
static Stage instance = new Stage();
}
public static Stage getInstance() {
return StageSingletonHolder.instance;
}
}
靜態getInstance()方法在每次調用時返回相同的實例。 (對於螺紋 安全,的getInstance()採用一種稱爲「按需保持器初始化」來創建單個實例的技術。)
然後,它使用XML
<bean id="theStage"
class="com.springinaction.springidol.Stage"
factory-method="getInstance" />
申報的getInstance作爲工廠方法。
我對此理解清楚。不過,出於好奇,我想如果我通過移除該靜態初始化
package com.springinaction.springidol;
public class Stage {
private Stage() {
}
public static Stage getInstance() {
return new Stage();
}
}
移除級舞臺這個線程安全的概念,那麼就可以通過兩個同步線程,以具有類舞臺的多個實例。我知道這只是一種可能性。在這種情況下,當Thread 1調用Spring容器(ApplicationContext)實例的getBean(「theStage」)方法時可能會出現這種情況。它發現沒有這樣的bean的實例。在線程2接管它的同時,它也發現沒有這樣的bean的實例。現在兩個線程都創建兩個不同的Spring bean,因爲工廠方法不是線程安全的。
如何增加兩個線程通過修改的getInstance方法(現在不是線程安全)返回不同實例的可能性如何增加?
請幫助