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,但每次返回的...