struts2單獨(dú)使用時(shí)action由struts2自己負(fù)責(zé)創(chuàng)建;與spring集成時(shí),action實(shí)例由spring負(fù)責(zé)創(chuàng)建。這導(dǎo)致在兩種情況下struts.xml配置文件的略微差異。
假如:LoginAction在包c(diǎn)n.edu.jlu.cs.action中。
1. struts2單獨(dú)使用時(shí),action的class屬性為L(zhǎng)oginAction的全路徑名,如下:
...
<action name="login" class="cn.edu.jlu.cs.action.LoginAction">
<result name="studentSuccess">
/student/studentindex.jsp
</result>
...
2. struts2與spring集成時(shí),class屬性是spring的applicationContext.xml中配置的bean的id屬性值。
---------------------------------------------------------------------------------------
//struts.xml
...
<action name="login" class="LoginAction">
<result name="studentSuccess">
/student/studentindex.jsp
</result>
...
----------------------------------------------------------------------------------------
//applicationContext.xml
...
<bean id="LoginAction" class="cn.edu.jlu.cs.action.LoginAction" />
...
----------------------------------------------------------------------------------------
struts2-spring-plugin-2.1.6.jar這個(gè)插件在產(chǎn)生action的時(shí)候,會(huì)自動(dòng)的按照名字把a(bǔ)ction的屬性注入進(jìn)去,
即使不在spring配置文件中為相關(guān)的action(bean)注入屬性或者在action類中用注解注入,
它也會(huì)按照action類中屬性的名字從當(dāng)前容器(??Spring)中找有沒有這個(gè)名字的bean并注入進(jìn)來(lái),或者顯示的給定一個(gè)名字注入。
所以action的id(spring配置文件中的)不要和它類里邊的變量名相同
如果在struts.xml文件中配置action的class是指向action的實(shí)際類,那么action的產(chǎn)生由struts控制,
此時(shí)action類中的相關(guān)變量會(huì)按照名稱從容器中注入一個(gè)相應(yīng)的bean,如果找不到對(duì)應(yīng)名稱的bean,一旦調(diào)用這個(gè)action就會(huì)出錯(cuò),
但是如果此時(shí)為變量加上一個(gè)@Resource注解,struts容器產(chǎn)生過(guò)action后就會(huì)從Spring容器中找相應(yīng)的bean注入。
如果class指向的是一個(gè)偽控制器(對(duì)應(yīng)spring配置文件中action的bean),那么action的產(chǎn)生由spring控制。
此時(shí)action類中的相關(guān)變量··必須··用注解@Resource或者xml的方式自定義注入相應(yīng)的bean,不象之前會(huì)按照名字從spring容器中自動(dòng)查找注入bean,
否則程序運(yùn)行出錯(cuò)