Spring(八):Bean的作用域

来源:https://www.cnblogs.com/jmsstudy/archive/2022/09/24/16726406.html
-Advertisement-
Play Games

Spring框架支持六個作用域,其中四個只有在Web中才能用到,在此我們只說明前兩種作用域。 下麵是所有的六種作用域: ScopeDescription singleton (Default) Scopes a single bean definition to a single object in ...


Spring框架支持六個作用域,其中四個只有在Web中才能用到,在此我們只說明前兩種作用域。

下麵是所有的六種作用域:

ScopeDescription

singleton

(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.

prototype

Scopes a single bean definition to any number of object instances.

request

Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring .ApplicationContext

session

Scopes a single bean definition to the lifecycle of an HTTP . Only valid in the context of a web-aware Spring .SessionApplicationContext

application

Scopes a single bean definition to the lifecycle of a . Only valid in the context of a web-aware Spring .ServletContextApplicationContext

websocket

Scopes a single bean definition to the lifecycle of a . Only valid in the context of a web-aware Spring .WebSocketApplicationContext

這裡我們對前兩種singleton(單例)和prototype(原型進行學習)。

一、singleton

單例作用域是Spring框架的預設作用域。官方對它的說明是這樣的:

僅管理單例 Bean 的一個共用實例,並且所有對 ID 或 ID 與該 Bean 定義匹配的 Bean 的請求都會導致 Spring 容器返回該特定 Bean 實例。

換句話說,當你定義一個bean定義並且它的範圍是一個單例時,Spring IoC容器只創建由該bean定義定義的對象的一個實例。此單個實例存儲在此類單例 Bean 的緩存中,並且對該

命名 Bean 的所有後續請求和引用都將返回緩存的對象。下圖顯示了單例作用域的工作原理:

 下麵是官方給出的單例的實例:

<bean id="accountService" class="com.something.DefaultAccountService"/>
<!-- the following is equivalent, though redundant (singleton scope is the default) -->
<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>

上面兩段代碼的效果是完全一樣的,由於預設是單例模式,所以scope="singleton"這樣顯性地展示出來並非必要的。

下麵我們對單例模式進行一個測試,看它是否是同一個對象的實例。

<bean id="student" class="com.jms.pojo.Student">

 

 由此我們可以確認這是同一個實例。

二、prototype

Bean 部署的非單例原型範圍會導致每次對特定 Bean 發出請求時都會創建新的 Bean 實例。也就是說,將 Bean 註入到另一個 Bean 中,或者您通過容器上的方法調用來請求它。通常,應將原型作用域用於所有有狀態 Bean,將單例作用域用於無狀態 Bean。

 下麵是官方給出的原型作用域的實例:

<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>

我們接下來對原型作用域進行測試:

<bean id="student" class="com.jms.pojo.Student" scope="prototype">

 

 可以看到使用原型作用域後兩個對象不再是一個實例。

 

(本文僅作個人學習記錄用,如有紕漏敬請指正)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、Date => String 代碼 /** * 函數描述:時間格式化工具 * @param format {String} 格式(y-年,M-月,d-日,H-時[24],h-時[12],m-分,s-秒,S-毫秒(3位數),q-季度,ap,午前am/午後pm) * @returns {String ...
  • 滿漢樓項目 筆記目錄:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 註意:筆記內容僅為實現該項目的基本後端功能,並不會實現可視化界面,效果都在控制台展示。 要完成的滿漢樓項目說明 滿漢樓項目功能多,界面複雜,涉及到複雜的awt和swing技 ...
  • 二叉樹查找指定的節點 前序查找的思路 1.先判斷當前節點的no是否等於要查找的 2.如果是相等,則返回當前節點 3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找 4.如果左遞歸前序查找,找到節點,則返回,否繼續判斷,當前的節點的右子節點是否為空,如果不為空,則繼續向右遞歸前 ...
  • ###一、介紹 selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為瞭解決requests無法直接執行JavaScript代碼的問題 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之後的結果,可支持多種瀏覽器 from selen ...
  • 簡述 類型:結構型 目的:通過抽離出多個維度相互組合(聚合)來代替繼承,簡化系統。 話不多說,看個優化案例。 優化案例 現有系統中,對於畫面視窗的邊框有一套樣式來控制是否有圓角。因為新的需求,需要增加兩套樣式,一套控制邊框線條的顏色(紅、黃、藍),一套控制邊框有無陰影。我們來看看幾種實現方式。 最初 ...
  • ##springboot中使用mybatisplus自帶插件實現分頁 ####1.導入mybatisplus分頁依賴 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId ...
  • OpenFeign 全稱 Spring Cloud OpenFeign,它是 Spring 官方推出的一種聲明式服務調用與負載均衡組件,它的出現就是為了替代進入停更維護狀態的 Feign。Spring Cloud openfeign對Feign進行了增強,使其支持Spring MVC註解,另外還整合... ...
  • ###一、介紹 Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup 3 目前已經停止開發,官網推薦在現在的項目中使用Beautiful Soup 4, 移植到BS4 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...