Spring框架提供了五種作用域(scope),這些作用域決定了bean的生命周期和范圍。以下是這五種作用域的詳細說明:
- singleton:這是Spring中的默認作用域。在一個Spring IoC容器中,singleton作用域的bean只會被實例化一次。這意味著,無論我們多少次請求該bean,容器都會返回相同的實例。這個實例在容器啟動時被創建,并在整個應用程序的生命周期內存在。
- prototype:prototype作用域與singleton相反,每次從容器請求prototype作用域的bean時,都會創建一個新的實例。這種作用域適用于那些需要在運行時動態生成實例的場景。
- request:request作用域用于Web應用程序。在一個HTTP請求內,每個bean都是唯一的。當請求結束時,該作用域內的bean就會被銷毀。這種作用域適用于需要在單個HTTP請求內保持狀態的場景。
- session:session作用域也用于Web應用程序,但與request作用域不同,它是在用戶會話級別上工作的。在一個用戶會話內,session作用域的bean是唯一的。當會話結束(通常是因為用戶關閉了瀏覽器或會話超時)時,該作用域內的bean就會被銷毀。這種作用域適用于需要在用戶會話期間保持狀態的場景。
- application:application作用域是最頂層的作用域,它等同于web應用程序的整個生命周期。在一個Web應用程序的上下文中,application作用域的bean在應用程序啟動時被創建,并在應用程序停止時被銷毀。這種作用域適用于需要在整個應用程序生命周期內保持狀態的bean。
這些作用域為開發者提供了靈活的配置選項,以適應不同的業務需求和場景。