配置Spring管理的bean的作用域

2021-05-22 08:39:46 字數 1298 閱讀 3951

把業務bean交給spring管理,在客戶端只要呼叫getbean()方法,就可以從容器裡獲取bean例項

通過getbean()方法產生同乙個業務bean的兩個例項,我們通過兩個變數引用是否相同用來判斷它從spring容器裡面獲取的bean是否為乙個

persionservice  persionservice1=(persionservice)ctx.getbean("persionservice");

persionservice  persionservice2=(persionservice)ctx.getbean("persionservice");

system.out.println(persionservice1==persionservice2)

從控制的列印訊息中可以看到兩個變數所索引用的物件是同乙個,或者說 在預設情況下業務bean交給spring容器管理之後這個bean是單例項,

若希望每呼叫getbean()方法都獲取新的例項,可以通過prototype(原型)這個屬性來指定。這裡牽扯到bean的作用域,而單例模式指定的作用域就是singleton作用域範圍,也就是若沒有指定作用域預設的就是singleton作用域

.singleton 在每個spring ioc容器中乙個bean定義只有乙個物件例項,預設情況下會在容器啟動時或例項容器時初始化bean但可以指定bean節點的lazy-init="true" 來延遲初始化bean,這時候,只有第一次獲取bean才會初始化如:

如果想對所有的bean都應用延遲初始化,可以在根節點beans設定default-lazy-init="true"/>

若沒有配置 lazy-init="default"

注: lazy-init="true"盡可能的不要使用,因為希望在應用啟動的時候觀察控制台列印的資訊對於業務bean完成化,若配置此屬性也就只能在執行期發現這個錯誤,除非完成特殊操作否則盡量少用

.prototype

每次從容器獲取bean都是新的物件

.request

.session

.global session

其他若在業務bean中定義乙個初始化方法init() 如:開啟資料庫連線或開啟某些資源 需要spring容器對這個bean初始化時就需要執行此方法這是通過容器反射技術來進行呼叫。配置如下:

若在業務bean中定義乙個銷毀方法detory() 如:關閉資料庫連線或關閉某些資源 需要spring容器對這個bean銷毀之前先執行銷毀方法

配置如下:

注:bean在spring容器中若沒有進行人為操作或人為刪除它預設的情況下 它一直在spring中,所以只有在spring容器關閉,而bean才被銷毀

spring配置和管理bean的方式簡歷概述

1.寫在前面 2.第一種方式。也是框架裡常用的方式,實現factorybean介面。我覺得該類更像是對bean的 spring容器getbean id 時見到bean的定義是普通class時,就會構造該class的例項來獲得bean,而如果發現是facotrybean介面的例項時,就通過呼叫它的ge...

Spring 的bean管理(註解)

替代配置,實現物件的建立 1 裡面特殊標記,使用註解可以完成功能 2 註解寫法 註解名稱 屬性名稱 屬性值 3 註解使用在類上面,方法上面 和 屬性上面 2.spring註解開發準備 1 匯入jar包 1 匯入基本的jar包 commons logging 1.2.jar log4j 1.2.16....

Spring中bean的管理

spring 中常見的容器 我們知道spring容器就是spring中bean的駐留場所。spring容器並不是只有乙個。spring自帶了多個容器實現,可以歸為兩種不同的型別 bean工廠和應用上下文。bean工廠是最簡單的容器,提供了基本的di支援 而應用上下文是基於beanfactory構建,...