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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM