1. 程式人生 > >spring 中的 scope 詳解

spring 中的 scope 詳解

1. scope概論

spring中scope是一個非常關鍵的概念,簡單說就是物件在spring容器(IOC容器)中的生命週期,也可以理解為物件在spring容器中的建立方式。

2. scope歷史及分類

目前,scope的取值有5種取值:

在Spring 2.0之前,有singleton和prototype兩種;

在Spring 2.0之後,為支援web應用的ApplicationContext,增強另外三種:request,session和global session型別,它們只實用於web程式,通常是和XmlWebApplicationContext共同使用。

3.單個scope詳解

 1)singleton (單一例項)

 此取值時表明容器中建立時只存在一個例項,所有引用此bean都是單一例項。如同每個國家都有一個總統,國家的所有人共用此總統,而這個國家就是一個spring容器,總統就是spring建立的類的bean,國家中的人就是其它呼叫者,總統是一個表明其在spring中的scope為singleton,也就是單例模型。

此外,singleton型別的bean定義從容器啟動到第一次被請求而例項化開始,只要容器不銷燬或退出,該型別的bean的單一例項就會一直存活,典型單例模式,如同servlet在web容器中的生命週期。

2)prototype

spring容器在進行輸出prototype的bean

物件時,會每次都重新生成一個新的物件給請求方,雖然這種型別的物件的例項化以及屬性設定等工作都是由容器負責的,但是隻要準備完畢,並且物件例項返回給請求方之後,容器就不在擁有當前物件的引用,請求方需要自己負責當前物件後繼生命週期的管理工作,包括該物件的銷燬。也就是說,容器每次返回請求方該物件的一個新的例項之後,就由這個物件“自生自滅”,最典型的體現就是spring與struts2進行整合時,要把action的scope改為prototype。

如同分蘋果,將蘋果的bean的scope屬性宣告為prototype,在每個人領取蘋果的時候,我們都是發一個新的蘋果給他,發完之後,別人愛怎麼吃就怎麼吃,愛什麼時候吃什麼時候吃,但是注意吃完要把蘋果核扔到垃圾箱!對於那些不能共享使用的物件型別,應該將其定義的scope設為prototype。

3)request

再次說明request,session和global session型別只實用於web程式,通常是和XmlWebApplicationContext共同使用。

<bean id ="requestPrecessor" class="...RequestPrecessor"   scope="request" />

Spring容器,即XmlWebApplicationContext 會為每個HTTP請求建立一個全新的RequestPrecessor物件,當請求結束後,該物件的生命週期即告結束,如同java web中request的生命週期當同時有100個HTTP請求進來的時候,容器會分別針對這10個請求建立10個全新的RequestPrecessor例項,且他們相互之間互不干擾,簡單來講,request可以看做prototype的一種特例,除了場景更加具體之外,語意上差不多。

4)session

對於web應用來說,放到session中最普遍的就是使用者的登入資訊,對於這種放到session中的資訊,我們可以使用如下形式的制定scope為session:

<bean id ="userPreferences" class="...UserPreferences"   scope="session" />

Spring容器會為每個獨立的session建立屬於自己的全新的UserPreferences例項,比request scope的bean會存活更長的時間,其他的方面沒區別,如果java web中session的生命週期

5)global session

<bean id ="userPreferences" class="...UserPreferences"   scope="globalsession" />

global session只有應用在基於porlet的web應用程式中才有意義,它對映到porlet的global範圍的session,如果普通的servlet的web 應用中使用了這個scope,容器會把它作為普通的session的scope對待。

4.scope配置

1)xml方式

進行bean的配置時,指定scope。

2)註解方式

前提為配置spring為註解配置。

相關推薦

Maven 依賴 scope

Maven 的哲學思想是,約定優於配置(Convention Over Configuration),Maven 依賴中 scope 的預設值是compile Scope 指定了依賴(第三方jar包)的 作用範圍 作用範圍包括,所在專案的測試、編譯、執行、打包等生命週期 其中

SpringModel

1.場景分析     在許多實際專案需求中,後臺要從控制層直接返回前端所需的資料,這時Model大家族就派上用場了。 2.三者區別 ①Model Model是一個介面,它的實現類為ExtendedMo

Spring註解 @Scope

0.思維導圖 1. scope概論 spring中scope是一個非常關鍵的概念,簡單說就是物件在spring容器(IOC容器)中的生命週期,也可以理解為物件在spring容器中的建立方式。 2. scope歷史及分類 目前,scope的取值有5種取值:

springscope

0.思維導圖 1. scope概論 spring中scope是一個非常關鍵的概念,簡單說就是物件在spring容器(IOC容器)中的生命週期,也可以理解為物件在spring容器中的建立方式。

Springbean的scope

  如何使用spring的作用域: <bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/> 這裡的scope就是用來配置spring bean的作用域,它標識bean的作

spring scope

1. scope概論 spring中scope是一個非常關鍵的概念,簡單說就是物件在spring容器(IOC容器)中的生命週期,也可以理解為物件在spring容器中的建立方式。 2. scop

Spring註解@Scope

Scope是spring中的一個註解,可以作為類註解,也可以作為方法註解,它有五個作用域,分別是singleton、prototype、request、session、global session,spring中的bean預設是使用singleton,即單例模式

【轉載】Maven依賴scope

lan 無需 而已 ref targe 周期 包含 配置 com Maven的一個哲學是慣例優於配置(Convention Over Configuration), Maven默認的依賴配置項中,scope的默認值是compile,項目中經常傻傻的分不清,直接默認了。今天梳

Spring Boot 2.0 Intellij Idea 圖文打包成可執行Jar

off aps cycle 找到 sna 打包 AS main 切換 我們使用Spring Boot 2.0 創建好我們的項目後,我們一般需要打包,然後部署到服務器上。 打包步驟: 1. 選中項目,右鍵——> Open Module Settings. 2. 切換

Spring mvcDispatcherServlet

簡介 DispatcherServlet是前端控制器設計模式的實現,提供SpringWebMVC的集中訪問點,而且負責職責的分派,而且與spring IOC容器無縫整合,從而可以獲得Spring的優勢。 職責和作用 其主要職責是排程工作,本身用於控制流程,具體為: 1.檔案上傳解析,如果請求型別是mu

Maven依賴scope(轉載)

ont 默認值 動作 周期 vid st表 傻傻 足夠 只需要 Maven的一個哲學是慣例優於配置(Convention Over Configuration), Maven默認的依賴配置項中,scope的默認值是compile,項目中經常傻傻的分不清,直接默認了。今天梳理

Maven依賴scope,在eclipse裡面用maven install可以程式設計成功,到伺服器上用命令執行報VM crash錯誤

 Maven依賴中的scope詳解 專案中用了<scope>test</scope>在eclipse裡面用maven install可以編譯成功,到伺服器上用命令執行報VM crash錯誤,原因是test程式碼提交上去了,但沒有對應的junit包導致的 解決辦法:1.伺服器上編譯的時

Maven依賴scope

Maven的一個哲學是慣例優於配置(Convention Over Configuration), Maven預設的依賴配置項中,scope的預設值是compile,專案中經常傻傻的分不清,直接默認了。今天梳理一下maven的scope。 scope的分類 com

spring配置檔案autowire

這個屬性對應的值有以下幾種 常用的是byName和byType,我來具體說說這兩種值的區別與作用。 例項(DAO、Implements、Service三者之間的關係) public class UserDAOImpl implements UserDAO{ pr

spring 各個jar以及在maven的配置

spring.jar 是包含有完整發布模組的單個jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。spring-src.zip就是所有的原始碼壓縮包。除了spring.jar 檔案,Spring 還

Spring基本功能

tex factor oid out 負責 sch bsp 初始化 pub 一、SpringIOC   Spring的控制反轉:把對象的創建,初始化,銷毀的過程交給SpringIOC容器來做,由Spring容器控制對象的生命周期。   1.1 啟動Spring容器的方式:

JSJSON

名稱 完全 rip json詳解 core 兼容 json字符串 之間 org JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,采用完全獨立於語言的文本格式,是理想的數據交換格式。同時,JSON是 JavaScript 原生格式

nodeJsnpm

commonjs -s license mon sem console 能力 效應 模塊安裝 npm 是 Node.js 的模塊依賴管理工具。作為開發者使用的工具,主要解決開發 node.js 時會遇到的問題。如同 RubyGems 對於 Ruby 開發者和 Maven 對

AngularJs指令配置參數scope

便在 指令 getname 可選 獨立 con func tex 掌握 AngularJs最重要也是最難理解的模塊之一就是它的指令(directive)了,自定義指令配置有很多個參數,下面我只說說其中scope的配置極其含義。 scope表示指令的作用域,它有三個可選值:t

006_netstatstate

51cto time list osi lose 手動 請求 等待 沒有 TCP三次握手的過程如下: 主動連接端發送一個SYN包給被動連接端; 被動連接端收到SYN包後,發送一個帶ACK和SYN標誌的包給主動連接端; 主動連接