如果在依賴注入的時候出現這麼乙個情況:乙個singleton bean需要依賴注入乙個prototype bean,如果不採用任何手段,直接注入的話,將會出現這樣乙個結果:每次建立singleton bean例項時,獲取的prototype bean例項也是相同的,從而在使用來看prototype bean例項也變成了singleton bean了
解決方法:
1>將singleton bean的實現類轉換成抽象類,也就是新增乙個abstract修飾該bean。
2>提供乙個抽象方法,該方法用於獲取所要依賴注入的prototype bean ,通常我們將他設定為getter方法形式
3>在元素下新增method>子元素讓spring為呼叫者bean的實現類實現指定的抽象方法,該元素有如下兩個引數:
1>name:指定需要讓spring實現的抽象方法
2>bean:指定spring實現該方法後的返回值
這裡我們設定的獲取prototype bean例項的抽象方法並沒有顯示為他實現,也沒有使用任何類繼承抽象類實現該方法,而是讓系統實現,此處spring將負責實現getdog()方法,spring實現該型別的方法的邏輯都是固定的,形如:
public
abstract
class person
}//配置該bean
"person" class="person">
"getuser" bean="user" />
"user" class="user" scope="prototype" />
//在main程式中測試
public
class test
}
協調作用域不同步的Bean
當spring容器中作用域不同的bean相互依賴時,可能出現一些問題 當兩個singleton作用域bean存在依賴關係時,或當prototype作用域bean依賴singleton作用域bean時,通過屬性定義依賴關係就足夠了。但當singleton作用域bean依賴prototype作用域bea...
2 5 協調作用域不同步的Bean
在spring容器中,最常見的為singleton與prototype作用域的bean,當我們多次獲取singleton作用域的bean時,得到的都是同乙個例項,而prototype作用域裡則每次都產生乙個新的bean例項。我們知道,spring容器在初始化某個bean前,先會建立被依賴的bean,...
Bean的作用域
bean元素有乙個scope屬性,用於定義bean的作用域,該屬性有如下五個值 1 singleton 單例模式,在整個spring ioc容器中,單例模式作用域的bean都將只生成乙個例項。一般spring容器預設bean的作用域為singleton 2 prototype 與singleton相...