|
一、需要的JAR文件為:Spring和Struts2框架本身需要的JAR文件以及他們所依賴的JAR文件,比如commons-logging.jar等等,另外還需要Struts2發(fā)布包中的struts2-spring-plugin-x.xx.jar。
二、在web.xml中增加WebApplicationContext的相應(yīng)配置,以下兩種配置方式本質(zhì)是一樣的。 1. Servlet 2.3及以上版本可以使用監(jiān)聽器,相應(yīng)配置如下: contextConfigLocation /WEB-INF/classes/applicationContext.xml org.springframework.web.context.ContextLoaderListener 如果spring配置文件被命名為applicationContext.xml,并且放在WEB-INF目錄下,則不需要配置,因?yàn)镃ontextLoaderListener默認(rèn)在WEB-INF目錄下尋找名為applicationContext.xml的文件。若存在多個(gè)Spring配置文件,則在中依次列出,之間以逗號隔開。 2. Servlet 2.3以下版本由于不支持,需要配置
三、在web.xml中完成加載WebApplicationContext之后,接下來就可以做到Spring和Struts2的整合了。整合有兩種方法,分別敘述如下: 1. 第一種實(shí)現(xiàn)方法: 1) 將Struts的業(yè)務(wù)邏輯控制器類配置在Spring的配置文件中,業(yè)務(wù)邏輯控制器中引用的業(yè)務(wù)類一并注入。注意,必須將業(yè)務(wù)邏輯控制器類配置為scope=”prototype”!示例如下: 2) 在struts.xml或者等效的Struts2配置文件中配置Action時(shí),指定的class屬性為Spring配置文件中相應(yīng)bean的id或者name值。示例如下: /index.jsp 2. 第二種實(shí)現(xiàn)方法: 1) 業(yè)務(wù)類在Spring配置文件中配置,業(yè)務(wù)邏輯控制器類不需要配置,Struts2的Action像沒有整合Spring之前一樣配置,的class屬性指定業(yè)務(wù)邏輯控制器類的全限定名。 2) 業(yè)務(wù)邏輯控制器類中引用的業(yè)務(wù)類不需要自己去初始化,Struts2的Spring插件會(huì)使用bean的自動(dòng)裝配將業(yè)務(wù)類注入進(jìn)來,其實(shí)業(yè)務(wù)邏輯控制器也不是Struts2創(chuàng)建的,而是Struts2的Spring插件創(chuàng)建的。默認(rèn)情況下,插件使用by name的方式裝配,可以通過增加Struts2常量來修改匹配方式:設(shè)置方式為:struts.objectFactory.spring.autoWire = typeName,可選的裝配參數(shù)如下: a) name:等價(jià)于Spring配置中的autowire=”byName”,這是缺省值。 b) type:等價(jià)于Spring配置中的autowire=”byType”。 c) auto:等價(jià)于Spring配置中的autowire=”autodetect”。 d) constructor:等價(jià)于Spring配置中的autowire=” constructor”。
四、如果原先在Struts2中使用了多個(gè)object factory,則需要通過Struts2常量顯式指定object factory,方式如下:struts.objectFactory = spring;如果沒有使用多個(gè)object factory,這一步可以省略。
五、可以通過設(shè)增加Struts2常量來指定是否使用Spring自身的類緩存機(jī)制??梢栽O(shè)定的值為true或false,默認(rèn)為true。設(shè)置方式為:struts.objectFactory.spring.useClassCache = false。六、至此,完成了兩種方式的整合。比較這兩種整合方式,其本質(zhì)是一樣的。不同之處在于,使用第二種自動(dòng)裝配的方式時(shí),由于沒有在Spring中配置業(yè)務(wù)邏輯控制器,所以需要對其配置一些AOP之類的內(nèi)容時(shí)就很難實(shí)現(xiàn)了。
|
|
|