Spring中的單例模式
阿新 • • 發佈:2022-01-02
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註解實現懶漢單例