Spring的方法注入

2021-07-05 03:13:52 字數 1008 閱讀 9516

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

為此可以讓a實現beanfactoryaware介面,讓a訪問容器的引用從而return (b)factory.getbean(「b」);但是這樣依賴spring框架介面的設計將與spring框架類繫結在一起。另一種通過方法注入可完美的解決這個問題。

spring ioc擁有複寫bean方法的能力,這項能力由cglib包完成。cglib可以在執行期動態操作class位元組碼,為bean動態建立子類或者實現類。

例如以下的乙個介面:

public

inte***ce magicboss

不編寫任何實現類,僅通過配置為該介面提供動態的實現,讓getcar()方法每次都返回乙個新的car bean:

class="" p:brand="" scope="prototype"/>

id="magicboss"

class=""/>

name="getcar" bean="car"/>

通過lookup-method元素標籤為getcar()提供動態實現,返回prototype的car bean,spring將在執行期為magicboss介面提供動態實現,效果類似以下**:

public

class

magicbossimpl

implements

public car getcar()

public

void

this,ctx = ctx;

}}

每次呼叫magicboss的getcar()方法時都從容器中獲取car bean,car的作用域為prototype所以每次都返回乙個新的car bean。

spring方法注入 Spring方法注入

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

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...