spring整合struts2

langgufu314發表於2012-09-06
[size=large][color=blue]struts2和spring的整合,關鍵點在於struts2中的action要納入spring容器的管理中成為一個bean。
可以在struts2中配置:
<struts>
<constant name="struts.objectFactory" value="spring" />
</struts>
同時action的配置class='beanID',訪問該Action時,會通過class對應值去spring中尋找相同id值的bean。
也可以複製struts2-spring-plugin-x-x-x.jar到WEB-INF/lib目錄下。
在struts2-spring-plugin-x-x-x.jar中有一個struts-plugin.xml配置檔案,該配置檔案配置內容:
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.class.reloading.watchList" value="" />
<constant name="struts.class.reloading.acceptClasses" value="" />
<constant name="struts.class.reloading.reloadConfig" value="false" />

<package name="spring-default">
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>
可以看出該spring外掛的作用就是關聯struts action和spring bean,在struts中就不必再配置 <constant name="struts.objectFactory" value="spring" />了。

1,action的class值應等於spring中的bean id值,實現關聯,action由spring建立。
2,若查不到,則由該spring外掛根據class的值建立action,並把該action賦給spring託管,在這種情況下action的建立不是由struts2完成,而是由外掛完成,並且外掛擁有把action納入spring容器管理的功能,此時spring配置檔案中可以不必配置action的bean了。

兩種方式都使得action成為了spring中的一個bean例項。

所以,class既可以為beanId,也可以為類路徑,當尋找到對應bean時可以直接作為bean訪問,若尋找不到,則會由外掛根據class類路徑負責建立action例項並送給spring成為其管理的一個bean。

不過若是所有action都不顯示的在spring中配置為bean,而是通過該spring外掛根據class建立bean的話,那麼如何把service注入action中?反正通過註釋的形式可以在action類中注入service類,除此之外還有別的方法沒...............[/color][/size]

相關文章