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 因為這樣在配置中的任何錯誤就會即刻...