天天看點

struts.objectfactory(spring+struts)

由spring管理struts的action執行個體

 當指定struts.objectfactory為spring時,struts2架構就會把bean轉發給spring來建立,裝配,注入。但是bean建立完成之後,還是由struts容器來管理其生命周期。配置方式:

(1)struts.xml中:

xml 代碼

<constant name="struts.objectfactory" value="spring" /> 

(2)struts.properties中:

java 代碼

struts.objectfactory=spring  

通常情況下,這樣子就夠了,然後在struts的action-mapping配置檔案中,如下:

<action name="user" class="com.myapp.admin.web.action.user.useraction"></action>   

   即可,如果在action中有依賴于其它的bean,也會被自動注入進來。這時候,action執行個體是以prototype方式建立的,spring會為每個請求建立一個action的執行個體。

    在某些時候,你可能希望不僅僅讓spring建立和裝配action對象,還希望讓spring完全管理這些對象,如希望使用aop或者希望使用acegi時。這時候,隻需要在spring的配置檔案中定義這些action 即可。如在applicationcontext.xml檔案中:

<bean id="user" class="com.myapp.web.action.user.useraction"/>  

然後在action-mapping中,指定class="user"即可。

   需要注意的一個地方:spring中的預設作用域是singleton作用域。而往往action屬于有狀态的bean,應該使用prototype作用域。<bean id="user" class="com.myapp.web.action.user.useraction" singleton="false"/> 如果忽略這個細節,在我們友善實用set,get方法處理資料的時候,可能會有線程安全上的風險。