Spring 03 bean的作用域

2021-08-19 14:27:20 字數 1491 閱讀 8749

bean的作用域

在預設情況下,spring應用上下文中所有的bean都是作為單例的形式建立的。

也就是說,不管給定的乙個bean被注入到其他bean多少次,每次所注入的都是同乙個例項。

spring定義了多種作用域,可以基於這些作用域建立bean;

• 單例(singleton):在整個應用中,只建立bean的乙個例項。

• 原型(prototype):每次注入或者通過spring應用上下文獲取的時候,都會建立乙個新的bean例項。

• 會話(request):在web應用中,為每個會話建立乙個bean例項。

• 請求(session):在web應用中,為每個請求建立乙個bean例項。

單例是預設的作用域,對於易變的型別,這並不合適。

如果選擇其它的作用域,要使用@scope註解,它可以與@component或@bean註解一起使用。

上面四種,其中比較常用的是單例、原型兩種作用域。

單例作用域:每次請求該bean都將獲得相同的例項。容器負責跟蹤bean例項的狀態,負責維護bean例項的生命週期行為。

原型作用域:程式每次請求該id的bean,spring都會新建乙個bean例項,然後返回給呼叫者。這種情況下,spring容器僅僅使用new關鍵字建立bean例項,一旦建立完成,容器不再跟蹤例項,也不會維護bean例項的狀態。

寫個小demo看下

package com.test.spring.server.test07;

/** * @author cyx

* @create 2018-04-30-21:37

*/public class helloworld

public void setmessage(string message)

}

<?xml version="1.0" encoding="utf-8"?>

package com.test.spring.server.test07;

/** * @author cyx

* @create 2018-04-30-21:36

*/ public static void main(string args)

}

輸出結果:

在 bean 的配置中,沒有設定任何關於作用域的配置,所以它是預設使用單例。

看兩次列印的物件位址都是一樣。

我們在來看原型作用域

輸出結果:

物件兩次列印出來的記憶體位址也是不一樣的。

每次向spring 請求一次,都會重新new乙個物件給我....

Spring03 Bean的作用域

通過bean元素的scope屬性指定bean的作用域,常用的作用域又singleton 單例 和prototype 原型 兩類。1.singleton singleton是spring容器預設的作用域。該型別的bean在spring容器中將只有乙個例項 無論有多少個bean引用它,始終指向同乙個物件...

Spring的bean作用域

接著既可以配置bean的作用域了 4 session session作用域表示該針對每一次http請求都會產生乙個新的bean,同時該bean僅在當前http session內有效,配置例項 配置例項 和request配置例項的前提一樣,配置好web啟動檔案就可以如下配置 5 global sess...

Spring中Bean的作用域

bean作用域 作用域描述 singleton 在每個spring ioc容器中乙個bean定義對應乙個物件例項。整個容器中只有該bean的唯一例項 prototype 乙個bean定義對應多個物件例項。request session global session 因為這樣在配置中的任何錯誤就會即刻...