當指定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配置文件中,如下:
xml 代碼:
< action name="user" class="com.myapp.admin.web.action.user.UserAction">
即可,如果在Action中有依賴於其它的BEAN,也會被自動注入進來。這時候,Action實例是以prototype方式創建的,SPRING會為每個請求創建一個ACTION的實例。
在某些時候,你可能希望不僅僅讓SPRING創建和裝配Action對象,還希望讓SPRING完全管理這些對象,如希望使用AOP或者希望使用acegi時。這時候,只需要在spring的配置文件中定義這些action 即可。如在applicationContext.xml文件中:
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方法處理數據的時候,可能會有線程安全上的風險。