1、使用ActionSupport(示例下載 )
??????
org.springframework.web.struts.ActionSupport 類提供了一個getWebApplicationContext() 方法,可用于手動創(chuàng)建一個 Spring 環(huán)境。
?????? 這種方式很簡單并且易于理解。但將 Struts Action與 Spring 框架耦合在一起。如果想替換掉 Spring,那么必須重寫代碼。 并且,由于 Struts Action不在 Spring 的控制之下,所以它不能獲得 Spring AOP 的優(yōu)勢。當使用多重獨立的 Spring 環(huán)境時,這種方式可能有用, 但是在大多數(shù)情況下,這種方法不如另外兩種方法合適。
?
2、覆蓋 RequestProcessor
(示例下載
)
?????? 使用 org.springframework.web.struts.DelegatingRequestProcessor 類來覆蓋 Struts
的 RequestProcessor 處理程序,可將 Spring 從 Struts Action 中分離出來。在struts-config中的配置如下:
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="csntextConfigLocation" value="/WEB-INF/beans.xml"/> </plug-in>
?????? 優(yōu)點是由于 Struts Action 注意不到 Spring 的存在,所以不需要重寫 Struts 代碼就可以使用其他控制反轉容器來替換掉 Spring。
?
?
3、將Action管理委托給Spring (示例下載 )
?????? 通過在struts-config中注冊Action時使用org.springframework.web.struts.DelegatingActionProxy類來實現(xiàn),該方式的優(yōu)點如下:
???????????? a):沒有 Spring 的話,所有的 Struts 動作都必須是線程安全的。如果設置 <bean> 標記的 singleton 屬性?? 為“false”,那么不管用何種方法,應用程序都將在每一個請求上有一個新生成的動作對象。
???????????? b):可以利用 Spring 的生命周期方法。例如,當實例化 Struts 動作時,<bean> 標記的 init-method 屬性 被用于運行一個方法。類似地,在從容器中刪除 bean 之前,destroy-method 屬性執(zhí)行一個方法。這些方法是管理昂貴對象的好辦法,它們以一種與 Servlet 生命周期相同的方式進行管理。
????????????? c):Struts Action不了解 Spring,不對代碼作任何改變就可用于非 Spring 應用程序中。RequestProcessor 的改變不會影響它,并且它可以利用 Spring AOP 特性的優(yōu)點。
已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論
JavaEye推薦
- 上海:天會皓聞誠聘資深Java架構師
- 北京:手機之家網(wǎng)站誠聘PHP程序員
- 上海:高薪誠聘Python開發(fā)人員
- 上海:天會皓聞誠聘CTO技術總監(jiān)
- 成都:月薪5千到1萬招聘Java開發(fā)工程師
文章來源:http://complex.javaeye.com/blog/611042