service注入到action中
之前本人每次要獲得service都是在action自己通過WebApplicationContext的getBean獲得的,一直在spring中只配置到了service這一層,沒有配置過action。今天閑的無聊將action也配置到了spring,原來是這么的簡單。
1.添加jar包struts2-spring-plugin-xxx.jar
2.在struts.xml配置文件中增加
<constant name="struts.objectFactory" value="spring"/>
3.在spring.xml中加入需要的action
<bean class="com.gavin.sma.action.UserInfoAction" id="userInfoAction"> <property name="userInfoService" ref="userInfoService"></property> </bean>
好了,完成了。
順便說說ObjectFactory(轉載至 http://aixiangct.blog.163.com/blog/static/9152246120101016113237982)
ObjectFactory,是xwork中很重要的一個類,是產生action的地方。單獨使用xwork的時候,action都是這個類創建的。
struts2 包裝了ObjectFactory,自成了一個StrutsObjectFactory,他是繼承自ObjectFactory的一個類,因此 struts2默認產生action的類就不使用xwork的ObjectFactory了,而是使用StrutsObjectFactory。
struts2 的插件struts2-spring-plugin-2.1.8.1.jar,又做了一個對象工 廠,StrutsSpringObjectFactory,它的父類是xwork的SpringObjectFactory,最原始的父類也是 ObjectFactory,我想xwork提供SpringObjectFactory的目的就是讓實現這繼承這個類,實現spring工廠。
於是struts2中也就是說有3個 對象工廠,
org.apache.struts2.spring.StrutsSpringObjectFactory(struts2的spring插件提供)
org.apache.struts2.impl.StrutsObjectFactory(struts2自帶)
com.opensymphony.xwork2.ObjectFactory(xwork自帶)。
他們都可以用於產生action。
在 xwork中默認使用ObjectFactory,在struts2中默認使用StrutsObjectFactory。使用struts2的 spring插件的時候默認使用StrutsSpringObjectFactory,這些都是自動的,其中前兩個都是struts2的內容。都是由
<constant name="struts.objectFactory" value="spring" />
來控制,這里的value,就是
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
在這bean里面定義的是哪個工廠,struts2就用哪個工廠。