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注解實現懶漢單例