spring方法注入 Spring方法注入

2021-10-07 23:27:37 字數 1323 閱讀 6976

spring方法注入

spring核心現成可用,有兩個作用域:單例和原型。 單例實現單例模式,這意味著在執行時(在jvm中)只有乙個例項。 spring在上下文建立期間例項化它們,將它們快取在上下文中,並在需要時(或類似的東西)從快取中提供它們。 每次訪問上下文以獲取bean時都會例項化原型。

當需要在單例範圍的bean中注入原型範圍的bean時,會出現問題。 由於單例是在上下文建立期間建立(然後注入)的:這是唯一一次訪問spring上下文,因此原型作用域的bean僅注入一次,因此無法實現它們的目的。

為了將原型注入單例中,並通過setter和建構函式注入併排進行syde,spring提出了另一種注入方法,稱為方法注入。 它的工作方式如下:由於單例是在上下文建立時例項化的,因此它改變了原型作用域的處理方式,從注入到通過抽象方法建立。 以下**段顯示了實現注入的不成功方法:

public

class

singleton

public

void

dosomething

()public

void

dosomethingelse

()}

public

abstract

class

singleton

public

void

dosomethingelse

()}

如您所見,**沒有指定createprototype()實現。 此職責委託給spring,因此需要以下配置:

id=

"prototype"

class=

"ch.frankel.blog.prototype"

scope=

"prototype"

/>

id="singleton"

class=

"sample.mysingleton"

>

name=

"createprototype"

bean=

"prototype"

/>

注意,方法注入的替代方法是顯式訪問spring上下文以自己獲取bean。 這樣做是一件壞事,因為它完全擊敗了整個inversion of control模式,但它確實有效(並且在伺服器上發生討厭的錯誤時,它實際上是唯一的選擇-參見下文)。

但是,使用方法注入有幾個主要限制:

翻譯自:

spring方法注入

Spring 方法注入

1 spring利用了cglib庫在執行時生成二進位制 功能,通過動態建立lookup方法bean的子類而達到複寫lookup方法的目的。例 建立乙個抽象類 public abstract class commandmanager protected abstract command createc...

spring 方法注入 lookup方法注入

1 無狀態bean 與有狀態bean 無狀態bean bean一旦例項化就被加進會話池中,各個使用者都可以共用。即使使用者已經消亡,bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他使用者呼叫。有狀態bean 有狀態會話bean 每個使用者有自己特有的乙個例項,在使用者的生存期內,be...

Spring的方法注入

spring中無狀態的bean的作用域一般可配置為單例模式,如果我們往單例模式的a中注入乙個prototype的型別b,並希望每次呼叫getb 時都能返回乙個新的b,傳統的注入方式就無法達到這樣的要求。原因是單例的bean注入關聯bean的動作只有一次,雖然b的型別是prototype,但每次返回的...