1. 程式人生 > 其它 >Spring中的單例模式

Spring中的單例模式

Spring中的單例模式

單例模式的介紹

1.1 簡介

​ 保證整個應用中某個例項有且只有一個

1.2作用
保證一個類僅有一個例項,並且提供一個訪問它的全域性訪問點。

單例模式的優點和缺點

單例模式的優點:

-單例模式可以保證記憶體裡只有一個例項,減少了記憶體的開銷。
-可以避免對資源的多重佔用。
-單例模式設定全域性的訪問點,可以優化和共享資源的訪問。

單例模式的缺點:

-單例模式一般沒有介面,擴充套件困難,如果要擴充套件,則除了修改原來的程式碼,沒有第二種途徑,違背開閉原則。
-在併發測試中,單例模式不利於程式碼除錯。在除錯過程中。如果單例中的程式碼沒有執行完,也不能擬生成一個新的物件。
-單例模式的功能程式碼通常寫在一個類中,如果功能設計不合理,則很容易違背單一職責原則。

1. 單例模式的結構

單例模式的主要角色如下。

- 單例類:包含一個例項且能自行建立這個例項的類。
- 訪問類:使用單例的類。
其結構如圖 1 所示。
package com.qf;
public class SingletonPattern{
    public static void main(String[] args){}
}
class Singleton{
    //因為單例模式保證一個類僅有一個例項
    //所以使用private  static修飾
    private static Singleton singleton;
   	//singlenton是什麼開始例項化
    private Singleton(){}
    
    public static Singleton getInstance(){
        return null;
    }
}

餓漢式

即在類載入的時候就進行例項化

package com.qf;
public class SingletonPattern{
    public static void main(String[] args){}
}
class Singleton{
    private static Singleton singleton = new Singlenton();
    private Singleton(){}
    
    public static Singleton getInstance(){
        return singleton;
    }
}

懶漢式

相反在類載入的時候不進行例項化,在第一次使用的時候在進行例項化

package com.qf;
public class SingletonPattern{
    public static void main(String[] args){}
}
class Singleton{
    private static Singleton singleton;
    private Singleton(){}
    //新增synchronized原因是為了防止多次序列化
    //出現多次例項化的原因是,如果A ,B執行緒同時為空就會出現兩次例項化
    public synchronized static Singleton getInstance(){
        if(singleton == null)
            singleton = new Singleton();
        return singleton;
    }
}

Spring中的單例模式

Spring中預設為單例模式

單例模式

單例模式,預設為餓漢單例,可以通過@Lazy註解實現懶漢單例