Spring作為當下主流的Java框架,它涉及了很多設計模式,如:單例模式、工廠模式、原型模式、模板模式、外觀模式等等,而Spring Bean預設是被設計成單例模式的,為什麼呢?
要想弄清楚Spring Bean為什麼預設被設計成單例的,就需要先了解一下什麼是單例模式。單例模式是最為常用的軟體設計模式,透過單例模式能保證一個類只有一個物件例項。
單例Bean只有在第一次建立Bean時建立,以後此Bean都是複用的,不會頻繁的建立物件了。
Spring之所以把Bean預設設計為單例的主要考慮還是效能!單例Bean優點很多,比如說:
1、複用Bean之後減少了新生例項的效能消耗;
2、減少了JVM垃圾回收,因為Bean少了,所以回收的物件也就少了;
3、可以更快的獲取到Bean,因為單例物件生成後Spring就把它存入快取了。
Bean預設被設計為單例的,其實也是有缺點的,最大的缺點就是無法保證執行緒安全!若多個請求依懶同一個Bean例項,假設此Bean是有狀態的,那就會變得混亂,所以這塊要考慮好。
綜上,對於一般專案而言,單例Bean是最優的選擇,不過在使用單例Bean時不要把Bean設計成有狀態的。
Spring作為當下主流的Java框架,它涉及了很多設計模式,如:單例模式、工廠模式、原型模式、模板模式、外觀模式等等,而Spring Bean預設是被設計成單例模式的,為什麼呢?
什麼是單例Bean ?要想弄清楚Spring Bean為什麼預設被設計成單例的,就需要先了解一下什麼是單例模式。單例模式是最為常用的軟體設計模式,透過單例模式能保證一個類只有一個物件例項。
單例Bean只有在第一次建立Bean時建立,以後此Bean都是複用的,不會頻繁的建立物件了。
單例Bean的優點Spring之所以把Bean預設設計為單例的主要考慮還是效能!單例Bean優點很多,比如說:
1、複用Bean之後減少了新生例項的效能消耗;
2、減少了JVM垃圾回收,因為Bean少了,所以回收的物件也就少了;
3、可以更快的獲取到Bean,因為單例物件生成後Spring就把它存入快取了。
單例Bean的缺點Bean預設被設計為單例的,其實也是有缺點的,最大的缺點就是無法保證執行緒安全!若多個請求依懶同一個Bean例項,假設此Bean是有狀態的,那就會變得混亂,所以這塊要考慮好。
綜上,對於一般專案而言,單例Bean是最優的選擇,不過在使用單例Bean時不要把Bean設計成有狀態的。