spring 方法注入 lookup方法注入

2021-07-30 02:18:24 字數 1627 閱讀 3203

1、無狀態bean 與有狀態bean

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

有狀態bean    

有狀態會話bean :每個使用者有自己特有的乙個例項,在使用者的生存期內,bean保持了使用者的資訊,即「有狀態」;一旦使用者滅亡(呼叫結束或例項結束),bean的生命期也告結束。即每個使用者最初都會得到乙個初始的bean。

也就是說,一次會話結束,bean的生命週期就結束的,就是有狀態的bean。

無狀態bean 一般配置成sigleton 單例模式

2、lookup方法注入

如果乙個單例模式的bean boss 有乙個property模式的bean car,那麼要想在每次呼叫boss時候的時候都想得到乙個新car bean?該怎麼做。要知道,boss 是單例模式的,只會被建立一次,注入一次屬性,也就是說,即使car是property模式,那也是只會乙個相同的car,因為boss只會被注入一次。

如果 要達到這個目的,可以讓boss 實現beanfactoryaware 介面,讓boss能夠從容器中訪問引用。boss的getcar()方法,可以採用如下 的實現方式

public car getcar()

同時,spring ioc 也提供了解決方法。

那就是lookup 方法注入

首先宣告乙個magicboss介面

public

inte***ce

magicboss

然後在配置檔案中 通過 如下的方式實現

<

beanid=

"car"

class

="com.aowin.modle.car"

scope

="prototype"

>

<

property

name

="brand"

><

value

>

紅旗value

>

property

>

<

property

name

="price"

><

value

>

12value

>

property

>

bean

>

<

bean

id= "magicboss"

class

= "com.aowin.modle.magicboss"

>

<

lookup-method

name

= "getcar"

bean

= "car"

/>

bean

>

這樣,每次呼叫的時候,magicboss都會從容器中獲取最新的car 。

同時應該注意的是car 的作用域不能是singleton(預設是singleton 所以要手工配置成 propoty)。這樣的話,上面的配置是依然是起作用的,但是每次取出的都是同乙個bean.

spring方法注入 Spring方法注入

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

Spring 方法注入

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

Spring的方法注入

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